gpt4 book ai didi

php - Laravel 访客计数器

转载 作者:可可西里 更新时间:2023-11-01 06:27:52 26 4
gpt4 key购买 nike

我正在尝试在 Laravel 中构建一个访客计数器....

我不知道把代码放在什么地方最好,以便它在每个页面上加载...但我把它放在 routes.php 中....

我想我最好将它放在 basecontroller 中?

但是没关系,我的代码现在看起来像这样:

    //stats

$date = new \DateTime;

$check_if_exists = DB::table('visitor')->where('ip', $_SERVER['REMOTE_ADDR'])->first();

$get_visit_day = DB::table('visitor')->select('visit_date')->where('ip', $_SERVER['REMOTE_ADDR'])->first();

$value = date_create($get_visit_day->visit_date);

if(!$check_if_exists)
{

DB::table('visitor')->insert(array('ip' => $_SERVER['REMOTE_ADDR'], 'hits' => '1', 'visit_date' => $date));

}else{

DB::table('visitor')->where('ip', $_SERVER['REMOTE_ADDR'])->increment('hits');
}


$value = date_create($get_visit_day->visit_date);

if ($check_if_exists && date_format($value, 'd') != date('d')) {

DB::table('visitor')->insert(array('ip' => $_SERVER['REMOTE_ADDR'], 'hits' => '1', 'visit_date' => $date));
}

这很好,但问题是,我的数据库列总是添加新值。

这是我的数据库: With the table 'visitor'

来自“访问者”表。

它不断添加一个新的IP,点击和visit_date...

如何只更新今天(那天)的点击,如果一天过去了,设置一个新的 IP 值并在该列中计数?

最佳答案

我不是 100% 确定这一点,但你应该能够做这样的事情。它未经测试,可能有更优雅的方法来执行此操作,但它是您的起点。

改变表格

visit_date(日期时间)列改为visit_date(日期)visit_time(时间)列,然后创建一个id 列作为主键。最后,将 ip + date 设置为唯一键,以确保您不会在一天内输入两次相同的 IP。

创建 Eloquent 模型

这只是为了方便:为表制作一个 Eloquent 模型,这样您就不必一直使用 Fluent(查询构建器):

class Tracker extends Eloquent {

public $attributes = [ 'hits' => 0 ];

protected $fillable = [ 'ip', 'date' ];
protected $table = 'table_name';

public static function boot() {
// Any time the instance is updated (but not created)
static::saving( function ($tracker) {
$tracker->visit_time = date('H:i:s');
$tracker->hits++;
} );
}

public static function hit() {
static::firstOrCreate([
'ip' => $_SERVER['REMOTE_ADDR'],
'date' => date('Y-m-d'),
])->save();
}

}

现在你应该可以通过调用这个来做你想做的事了:

Tracker::hit();

关于php - Laravel 访客计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29694372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com