gpt4 book ai didi

laravel - 页面浏览计数器在Laravel 5

转载 作者:行者123 更新时间:2023-12-04 16:43:52 24 4
gpt4 key购买 nike

我想知道您如何在Laravel 5中制作一个页面浏览计数器。是否有任何特定的软件包可以帮助我解决这个问题?由于最近发布了稳定版本的Laravel 5,我基本上陷入了困境。

最佳答案

有很多方法可以做到这一点,但是每种方法各有利弊。在这个答案中,我将向您展示构建网页浏览计数器的一些不同方法。

#1数据库表中的简单列

假设我们正在建立一个包含帖子的博客,并且希望跟踪总的综合浏览量。我们可以做的是将viewspage_views列添加到我们的posts数据库表中。此列将存储页面浏览总数。每当有人向某人显示帖子时,我们都可以增加该数字。

示例代码:

public function show($id)
{
$post = \App\Models\Post::find($id); // fetch post from database
$post->increment('views'); // add a new page view to our `views` column by incrementing it

return view('posts.show', [
'post' => $post,
]);
}

然后,在您的 View ( Blade 或php)中,您可以得到如下所示的列;
<div class="panel-footer">
Views: {{ $post->views }}
</div>

但是通过这种方式,我们永远不会知道人们何时准确查看了该帖子。只能获得总数,而不是过去24小时,7天,14周或“2017年12月1日”的总观看次数。

#2额外的表格来存储所有 View

这种方式与#1方式非常不同,因为每个页面 View 都将作为记录存储在表中。

在编写步骤之前,我想告诉您我创建了一个名为 Eloquent Viewable 的程序包。它的工作原理与#2完全相同。

首先,您需要为 views表创建数据库迁移。此迁移应包含以下内容:
$table->increments('id')->unsigned();
$table->morphs('viewable');
$table->timestamps();

然后我们需要创建一个Eloquent模型,这样我们就可以获取 View :
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class View extends Model
{
protected $table = 'views';
protected $guarded = ['id'];
}

然后,将以下代码添加到每个可以查看或需要此功能的模型中。在此示例中,我们将此功能提供给 Post模型。
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Carbon\Carbon;

class Post extends Model
{
/**
* Get the page views associated with the given model.
*
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function views()
{
return $this->morphMany(
\App\Models\View::class,
'viewable'
);
}

/**
* Get the total number of views.
*
* @return int
*/
public function getViewsCount()
{
return $this->views()->count();
}

public function getViewsCountSince($sinceDateTime)
{
return $this->views()->where('created_at', '>', $sinceDateTime)->count();
}

public function getViewsCountUpto($uptoDateTime)
{
return $this->views()->where('created_at', <', $uptoDateTime)->count();
}
}

现在,您可以使用以下方法来获取 View 计数。
// total number of views
$post->getViews();

// total number of views since the past 24 hours
$post->getViewsCountSince(Carbon::now()->subDay(1));

// total number of views upto 2 months ago
$post->getViewsCountUpto(Carbon::now()->subMonths(2));

关于laravel - 页面浏览计数器在Laravel 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656448/

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