hawaaworld/laravel-trends

Laravel Trends 为您的应用程序提供轻量级的趋势系统。

v2.1.0 2024-07-12 14:35 UTC

This package is auto-updated.

Last update: 2024-09-12 15:03:34 UTC


README

Laravel Trends

Total Downloads Latest Stable Version License

注意 此包是 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许可证