所以我在我的应用程序中添加了这个页面浏览计数器,该计数器计算艺术家页面上的每次访问。现在,如果您刷新页面,则每次刷新计数器为+1。
我的问题是我怎样才能只按天计算独立访问量?
我的控制器:
if ( $artist ) {
$getartist = $this->_artist->get($artist, 'slug');
if ( $getartist ) {
$getsongs = $this->_song->collections($input, $getartist->id, 'ASC');
$this->_artist->updateVisits($getartist->id);
$data = [
'is_artist' => true,
'artist' => $getartist,
'songs' => $getsongs,
'randomsongs' => $this->randomsongs,
];
return $this->view('index', $data);
}
}
计数器的代码是:
$this->_artist->updateVisits($getartist->id);
然后在我的艺术家存储库中:
public function updateVisits($artist_id)
{
$artist = $this->model->where("id",$artist_id)->first();
$artist->visits = $artist->visits+1;
$artist->save();
}
那么,如果用户刷新页面,如何防止计数器计数呢?
好的,
我用饼干找到了解决这个问题的解决方案这是我的代码。
public function updateVisits($artist_id)
{
$artist = $this->model->where("id",$artist_id)->first();
// Check if cookies exist
if(!isset($_COOKIE['visited_id' . $artist_id])) {
// If not set cookie and pass counter
setcookie('visited_id' . $artist_id, $artist_id, time()+30); /* expire in seconds */
$artist->visits = $artist->visits+1;
$artist->save();
// If cookie exist on user computer
} else {
//do nothing
}
}
首先在 DB table
上添加一个 date
字段。然后将您的函数更改为以下-
public function updateVisits($artist_id)
{
$artist = $this->model->firstOrCreate(['id' => $artist_id,'your_date_field_name'=>date('Y-m-d')]);
$artist->visits = $artist->visits+1;
$artist->save();
}
并且不要忘记fillable
数组上添加id, your_date_field_name
以mass
可分配。