davidjr82 / eloquent-viewable
一个简单的包,允许您将视图与Eloquent模型关联
Requires
- php: ^7.0
- illuminate/bus: 5.5.*|5.6.*|5.7.*
- illuminate/cache: 5.5.*|5.6.*|5.7.*
- illuminate/contracts: 5.5.*|5.6.*|5.7.*
- illuminate/cookie: 5.5.*|5.6.*|5.7.*
- illuminate/database: 5.5.*|5.6.*|5.7.*
- illuminate/http: 5.5.*|5.6.*|5.7.*
- illuminate/queue: 5.5.*|5.6.*|5.7.*
- illuminate/routing: 5.5.*|5.6.*|5.7.*
- illuminate/support: 5.5.*|5.6.*|5.7.*
- jaybizzle/crawler-detect: ^1.0
- nesbot/carbon: ^1.22
Requires (Dev)
- illuminate/config: 5.5.*|5.6.*
- mockery/mockery: ^1.0
- orchestra/database: ^3.5
- orchestra/testbench: ~3.5.0|~3.6.0|~3.7.0
- phpunit/phpunit: ^6.5|^7.0
- 4.0.x-dev
- 3.0.x-dev
- 2.x-dev
- 2.4.x-dev
- v2.4.1
- v2.4.0
- 2.3.x-dev
- v2.3.0
- 2.2.x-dev
- v2.2.0
- 2.1.x-dev
- v2.1.0
- 2.0.x-dev
- v2.0.0
- 1.0.x-dev
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v1.0.0-alpha
- v0.1.7
- v0.1.6
- v0.1.5
- v0.1.4
- v0.1.3
- v0.1.2
- v0.1.1
- v0.1.0
- dev-2.4-tags
- dev-feature/views-by-period
- dev-feature/views-viewed-by-type
- dev-feature/readme-rewrite
- dev-feature/tags
- dev-master
This package is not auto-updated.
Last update: 2024-09-22 02:31:55 UTC
README
这个Laravel >= 5.5的包允许您将视图与Eloquent模型关联。
安装后,您可以执行以下操作
// Get the total number of views $post->getViews(); // Get the total number of views since the given date $post->getViews(Period::since(Carbon::parse('2014-02-23 00:00:00'))); // Get the total number of views between the given date range $post->getViews(Period::create(Carbon::parse('2014-00-00 00:00:00'), Carbon::parse('2016-00-00 00:00:00'))); // Get the total number of views in the past 6 weeks (from today) $post->getViews(Period::pastWeeks(6)); // Get the total number of views in the past 2 hours (from now) $post->getViews(Period::subHours(2)); // Store a new view in the database $post->addView();
概览
Eloquent Viewable是一个功能强大、灵活且易于使用的Laravel包,用于将视图与Eloquent模型关联。它旨在快速、灵活,适用于各种项目。
本包不是用于收集分析数据的。它旨在简单地存储Laravel Eloquent模型的视图。您可以使用此包用于如:文章、视频、课程和酒店等模型,当然,您也可以根据需要使用此包。
特性
以下是一些主要特性
- 将视图与Eloquent模型关联
- 获取(唯一)视图总数
- 获取自特定日期以来的(唯一)视图总数
- 获取截至特定日期的(唯一)视图总数
- 获取两个日期之间的(唯一)视图总数
- 获取从今天起过去的
days、weeks、months和years的(唯一)视图总数 - 获取从现在起过去的
seconds、minutes、hours、days、weeks、months和years的(唯一)视图总数 - 缓存检索到的视图计数
- 在将视图保存到数据库之前排队,以防止慢请求
欢迎提出功能请求!创建以[Feature Request]为前缀的问题或发送pull request。
文档
在本文档中,您可以找到一些有关使用此Laravel包的有用信息。如果您对此包有任何问题或发现任何安全相关的问题,请随时通过github@cyrildewit.nl与我联系。
目录
入门
要求
Eloquent Viewable包需要PHP 7+和Laravel 5.5+。
Lumen不受支持!
版本信息
安装
您可以使用以下命令通过composer安装此包:
composer require cyrildewit/eloquent-viewable
可选,您可以在config/app.php文件中添加服务提供者。否则,这可以通过自动包发现来完成。
// config/app.php 'providers' => [ // ... CyrildeWit\EloquentViewable\EloquentViewableServiceProvider::class, ];
您可以使用以下命令发布迁移文件:
php artisan vendor:publish --provider="CyrildeWit\EloquentViewable\EloquentViewableServiceProvider" --tag="migrations"
在发布迁移文件后,您可以运行迁移来创建views表。但是,如果您已经有一个名为views的表,您可以在配置中更改此名称。搜索'models->view->table_name'并将值更改为唯一的名称。
php artisan migrate
您可以使用以下命令发布配置文件:
php artisan vendor:publish --provider="CyrildeWit\EloquentViewable\EloquentViewableServiceProvider" --tag="config"
使用
在以下部分,您将找到有关使用此包的信息。
准备您的模型
要使Eloquent模型可查看,只需在模型定义中添加Viewable特质即可。此特质提供了各种方法,允许您保存视图、检索视图计数并按视图计数对项目进行排序。
use Illuminate\Database\Eloquent\Model; use CyrildeWit\EloquentViewable\Viewable; class Post extends Model { use Viewable; // ... }
存储视图
通过在可查看模型上调用 ->addView() 方法,轻松地向模型添加新视图。
最佳位置是在控制器中,如果你遵循 CRUD 标准,那么就是 @show 方法。
$post->addView();
一个 PostController 可能看起来像这样
// ... public function show(Post $post) { $post->addView(); return view('blog.post', compact('post')); } // ...
注意:如果你想要排队执行这个任务,你可以在配置中开启它!请参阅排队执行 ProcessView 任务部分!
带有过期日期存储视图
如果你想在同一会话中的视图之间添加延迟,你可以使用可查看模型上的可用 addViewWithExpiryDate。
$post->addViewWithExpiryDate(Carbon::now()->addHours(2));
此方法将向模型添加一个新视图,并在用户的会话中添加一条记录。如果你多次调用此方法,你会看到视图计数不会增加。当前日期时间超过过期日期后,将存储新的视图。
检索视图计数
在将 Viewable 特性添加到你的模型后,你将能够在可查看模型上调用 getViews() 和 getUniqueViews()。这两个方法都接受一个可选的 Period 实例。
/** * Get the total number of views. * * @param \CyrildeWit\EloquentViewable\Support\Period * @return int */ public function getViews($period = null): int; /** * Get the total number of unique views. * * @param \CyrildeWit\EloquentViewable\Support\Period * @return int */ public function getUniqueViews($period = null) : int;
Period 类
请注意,以下代码不是有效的 PHP 语法!
// Create a new Period instance. Period::create(DateTime $startDateTime = null, DateTime $endDateTime = null); // Create a new Period instance with only a start date time. Period::since(DateTime $startDateTime); // Create a new Period instance with only a end date time. Period::upto(DateTime $endDateTime);
// Period instance with a start date time of today minus the given days. Period::pastDays(int $days); // Period instance with a start date time of today minus the given weeks. Period::pastWeeks(int $weeks); // Period instance with a start date time of today minus the given months. Period::pastMonths(int $months); // Period instance with a start date time of today minus the given years. Period::pastYears(int $years);
// Period instance with a start date time of now minus the given seconds. Period::subSeconds(int $seconds); //Period instance with a start date time of now minus the given minutes. Period::subMinutes(int $minutes); // Period instance with a start date time of now minus the given hours. Period::subHours(int $hours); // Period instance with a start date time of now minus the given days. Period::subDays(int $days); // Period instance with a start date time of now minus the given weeks. Period::subWeeks(int $weeks); // Period instance with a start date time of now minus the given months. Period::subMonths(int $months); // Period instance with a start date time of now minus the given years. Period::subYears(int $years);
示例
$post->getViews(); $post->getViews(Period::since(Carbon::parse('2007-05-21 12:23:00'))); $post->getViews(Period::upto(Carbon::parse('2013-05-21 00:00:00'))); $post->getViews(Period::create(Carbon::parse('2014-00-00 00:00:00'), Carbon::parse('2016-00-00 00:00:00')));
$post->getUniqueViews(); $post->getUniqueViews(Period::since(Carbon::parse('2007-05-21 12:23:00'))); $post->getUniqueViews(Period::upto(Carbon::parse('2013-05-21 00:00:00'))); $post->getUniqueViews(Period::create(Carbon::parse('2014-00-00 00:00:00'), Carbon::parse('2016-00-00 00:00:00')));
$post->getViews(Period::pastDays(5)); $post->getViews(Period::pastWeeks(6)); $post->getViews(Period::pastMonths(8)); $post->getViews(Period::pastYears(3));
$post->getUniqueViews(Period::pastDays(5)); $post->getUniqueViews(Period::pastWeeks(6)); $post->getUniqueViews(Period::pastMonths(8)); $post->getUniqueViews(Period::pastYears(3));
$post->getViews(Period::subSeconds(30)); $post->getViews(Period::subMinutes(15)); $post->getViews(Period::subHours(8)); $post->getViews(Period::subDays(5)); $post->getViews(Period::subWeeks(6)); $post->getViews(Period::subMonths(8)); $post->getViews(Period::subYears(3));
$post->getUniqueViews(Period::subSeconds(30)); $post->getUniqueViews(Period::subMinutes(15)); $post->getUniqueViews(Period::subHours(8)); $post->getUniqueViews(Period::subDays(5)); $post->getUniqueViews(Period::subWeeks(6)); $post->getUniqueViews(Period::subMonths(8)); $post->getUniqueViews(Period::subYears(3));
按视图计数排序模型
按视图数检索 Viewable 模型
$sortedPosts = Post::orderByViewsCount()->get(); // desc $sortedPosts = Post::orderByViewsCount('asc')->get();
按唯一视图数检索 Viewable 模型
$sortedPosts = Post::orderByUniqueViewsCount()->get(); // desc $sortedPosts = Post::orderByUniqueViewsCount('asc')->get();
ViewTracker辅助函数
按可查看类型获取视图
use CyrildeWit\EloquentViewable\ViewTracker; // Get the total number of views of one type ViewTracker::getViewsCountByType(Post::class); // Get the total number of views of multiple types ViewTracker::getViewsCountByTypes([Post::class, Location::class, Hotel::class]);
配置
排队ProcessView作业
当你对你的模型调用 ->addView() 方法时,它将在数据库中保存一个带有一些数据的新视图。因为这将减慢你的应用程序,你可以通过更改配置文件中 jobs 下的 store_new_view 的值来开启排队。确保你的应用程序已准备好排队。如果没有,请参阅官方的 Laravel 文档 获取更多信息!
扩展
如果你想用你自己的实现扩展或替换核心类,你可以覆盖它们
CyrildeWit\EloquentViewable\ViewCyrildeWit\EloquentViewable\ViewableServiceCyrildeWit\EloquentViewable\CrawlerDetector\CrawlerDetectAdapter
注意:不要忘记所有自定义类都必须实现它们原始的接口
替换 View 模型为自定义实现
$this->app->bind( \CyrildeWit\EloquentViewable\Contracts\View::class, \App\Models\CustomView::class );
替换 ViewableService 服务为自定义实现
$this->app->singleton( \CyrildeWit\EloquentViewable\Contracts\ViewableService::class, \App\Services\CustomViewableService::class );
替换 CrawlerDetectAdapter 类为自定义实现
$this->app->singleton( \CyrildeWit\EloquentViewable\Contracts\CrawlerDetector::class, \App\Services\CrawlerDetector\CustomAdapter::class );
食谱
为常用周期格式创建辅助方法
App\Models\Post
// ... public function getViewsSince(DateTime $sinceDateTime) { return $this->getViews(Period::since($sinceDateTime)); } public function getViewsUpto(DateTime $uptoDateTime) { return $this->getViews(Period::upto($uptoDateTime)); } public function getViewsBetween(DateTime $sinceDateTime, DateTime $uptoDateTime) { return $this->getViews(Period::create($sinceDateTime, $uptoDateTime)); } public function getViewsInPastDays(int $days) { return $this->getViews(Period::pastDays($days)); } // ...
resources/views/post/show.blade.php
<!-- ... --> Page views since 2014: {{ $post->getViewsSince(Carbon::create(2014)) }} Page views upto 2016: {{ $post->getViewsUpto(Carbon::create(2016)) }} Page views between 2016 - 2018: {{ $post->getViewsBetween(Carbon::create(2016), Carbon::create(2018)) }} Page views in the past 5 days: {{ $post->getViewsInPastDays(5) }} <!-- ... -->
升级
请参阅UPGRADING 获取详细的升级指南。
变更日志
请参阅CHANGELOG 了解最近更改的详细信息。
贡献
请参阅CONTRIBUTING 获取详细信息。
鸣谢
许可
本项目受 MIT 许可证许可 - 请参阅LICENSE.md 文件获取详细信息。