Laravel 4.2页面视图计数器

时间:2017-12-31 04:24:59

标签: laravel laravel-4

所以我将此页面查看计数器添加到我的应用程序,该计数器计算艺术家页面上的每次访问。现在,如果您刷新页面,则每次刷新计数器为+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);

然后在我的ArtistRepository中:

public function updateVisits($artist_id)
{
$artist = $this->model->where("id",$artist_id)->first();
$artist->visits = $artist->visits+1;
$artist->save();
}

那么如果用户刷新页面,我如何防止计数器计数呢?

2 个答案:

答案 0 :(得分:0)

首先在date上添加DB table字段。然后将您的功能更改为以下 -

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();
}

不要忘记在id, your_date_field_name数组上添加fillablemass可分配。

答案 1 :(得分:0)

好的,我找到了一个解决这个问题的解决方案 这是我的代码。

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
}
}