拉拉维尔 4.2 页面浏览量计数器



所以我在我的应用程序中添加了这个页面浏览计数器,该计数器计算艺术家页面上的每次访问。现在,如果您刷新页面,则每次刷新计数器为+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_namemass可分配。

相关内容

  • 没有找到相关文章

最新更新