hawaaworld / laravel-trends
Laravel Trends 为您的应用程序提供轻量级的趋势系统。
Requires
- php: ^8.0|^8.1|^8.2|^8.3
- laravel/framework: ^9.0|^10.0|^11.0
Requires (Dev)
- laravel/pint: dev-main
README
注意 此包是 hacklabsdev/laravel-trends 的分支,不由原始作者维护。
简介
你是否好奇过Twitter的趋势是如何工作的?Laravel Trends 为您的应用程序提供轻量级的趋势系统。
先决条件
在安装包之前,请确保您的队列正在运行,因为趋势系统使用它来控制趋势。请参考Laravel 官方文档 来配置您项目中的队列。
安装
您可以通过Composer安装Laravel Trends
composer require hawaaworld/laravel-trends
接下来,使用vendor:publish命令发布趋势配置和迁移文件。配置文件将放在您的配置目录中
php artisan vendor:publish --provider="Hawaaworld\Trends\TrendsServiceProvider"
最后,您应该运行数据库迁移
php artisan migrate
工作原理
Trends
允许您为任何模型创建趋势系统。以Twitter为例。每当有人发表带有hashtag的推文时,它会获得1点的能量,但30分钟后,这个单独的能量点会损失0.25的价值。再过30分钟,它会损失0.45点。最后,再过30分钟,它会损失0.30的价值,回到0。但如何检测趋势呢?想象一下,有成千上万的人同时点击同一个hashtag,这个hashtag将会有成千上万的能量点,如果您有一个有序的hashtag列表,那么这个hashtag肯定会在最上面,但如果几分钟内这个hashtag没有再获得能量点,它将开始失去能量,并随着时间的推移而减少。
配置
要配置您的损失时间,您可以在 config/trends.php
中设置 loss_time
参数。损失时间以小时为单位。
准备您的模型
为了让您的模型能够与趋势系统一起工作,您需要实现 Energy 接口和 HasEnergy 特性。为了返回当前模型能量的值,请将 energy_amount
添加到您的序列化中。
use Hawaaworld\Trends\Contracts\Energy; use Hawaaworld\Trends\Traits\HasEnergy; class Hashtag extends Model implements Energy { use HasEnergy; protected $appends = ['energy_amount']; }
用法
要为您的模型添加能量,请使用以下方法
$hashtag->addEnergy(amount: 1.0);
要获取当前的能量值
$hashtag->energy->amount;
获取顶级趋势
要获取所有类型模型中的顶级趋势,请使用以下方法
$trending = Trends::top(10); /** * returns a collection type of the top 10 trending models: * * Illuminate\Support\Collection { * #items: array:10 [ * 0 => App\Models\Article * 1 => App\Models\Article * 2 => App\Models\Video * 3 => App\Models\Article * 4 => App\Models\Hashtag * 5 => App\Models\Hashtag * 6 => App\Models\Article * 7 => App\Models\Video * 8 => App\Models\Comment * 9 => App\Models\Comment * ] * } */
要自定义您想要检索的模型,例如,如果您想获取顶级10个趋势视频,您可以使用以下方法
$trendingVideos = Trends::top(10, Video::class);
您可以为获取您想要的趋势模型设置自己的查询构建器
$trendingShortVideos = Trends::top(10, Video::class, function($query) { $query->where('duration', '<', 60); });
许可证
Laravel Trends 是开源软件,许可协议为 MIT许可证。