如何解决页面浏览量 LARAVEL
我还是 laravel 的新手,我想在我的页面上实现访问者/查看计数器,我到处寻找并找到了一种方法,但是当我尝试它时,它似乎无法正常工作,视图始终为 0。
>这是存储视图的表:
Schema::create('views',function (Blueprint $table) {
$table->increments('id')->unsigned();
$table->morphs('viewable');
$table->timestamps();
});
这是视图模型:
class views extends Model
{
protected $table = 'views';
protected $guarded = ['id'];
}
public function views()
{
return $this->morphMany(
\App\Models\views::class,'viewable'
);
}
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();
}
<i class="fa fa-eye"></i> {{$details->getViewsCount()}} Views
我获得了 0 次观看,我不知道这是否有效,或者我做错了什么.. 请提供任何想法!
解决方法
我能看到的问题是关系。
View 模型包含 viewable_id 和 viewable_type,因此关系应该是 MorphTo。 然后例如,如果 Post 模型可以有视图,那么这将具有 MorphMany 关系。
您正在创建此处记录的一对多多态关系 https://laravel.com/docs/8.x/eloquent-relationships#one-to-many-polymorphic-relations。
此外,查看 withCount 方法,https://laravel.com/docs/8.x/eloquent-relationships#counting-related-models 可能更适合您的需求。因此,您可以执行以下操作:
Post::withCount('views');
或者如果您需要根据查看完成时间过滤计数。
Post::withCount([
'views' => function ($query) {
$query->where('created_at',>=,$someDate)
}
]);
然后您可以像 $posts[0]->views_count
一样访问它。
编辑:
我还要补充一点,以确保如果您手动添加数据,viewable_type 值需要看起来像这样 App\Models\View
或在 Laravel 版本 7 或更低版本中,文件的默认位置将是 {{1} },但这取决于模型的位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。