rennokki/rating

Laravel Eloquent Rating 允许您为任何模型分配评分。

资助包维护!
rennokki

3.1.0 2022-02-09 21:55 UTC

README

CI codecov StyleCI Latest Stable Version Total Downloads Monthly Downloads License

Laravel Eloquent Rating 允许您为任何模型分配评分,就像任何基于星级的其他评论一样。

🤝 支持

如果您在生产应用程序、演示文稿、爱好项目、学校项目等中使用 Renoki Co. 的一个或多个开源包,请通过 Github Sponsors 支持我们的工作。 📦

🚀 安装

安装包

$ composer require rennokki/rating

发布配置

$ php artisan vendor:publish --provider="Rennokki\Rating\RatingServiceProvider" --tag="config"

发布迁移

$ php artisan vendor:publish --provider="Rennokki\Rating\RatingServiceProvider" --tag="migrations"

准备模型

为了允许模型对其他模型进行评分,它应该使用 CanRate 特性和实现 Rater 合同。

use Rennokki\Rating\Traits\CanRate;
use Rennokki\Rating\Contracts\Rater;

class User extends Model implements Rater
{
    use CanRate;
    ...
}

可以被评分的其他模型应使用 CanBeRated 特性和 Rateable 合同。

use Rennokki\Rating\Traits\CanBeRated;
use Rennokki\Rating\Contracts\Rateable;

class User extends Model implements Rateable
{
    use CanBeRated;
    ...
}

如果您的模型既能评分也能被其他模型评分,您应该使用 Rate 特性和 Rating 合同。

use Rennokki\Rating\Traits\Rate;
use Rennokki\Rating\Contracts\Rating;

class User extends Model implements Rating
{
    use Rate;

    //
}

🙌 使用

要为其他模型评分,只需调用 rate() 方法

$page = Page::find(1);

$user->rate($page, 10);
$user->hasRated($page); // true
$page->averageRating(User::class); // 10.0, as float

作为 rate() 方法的第二个参数,您可以传递评分分数。它可以是一个字符串、整数或浮点数。

要更新评分,您可以调用 updateRatingFor() 方法

$user->updateRatingFor($page, 9);
$page->averageRating(User::class); // 9.00, as float

正如您所看到的,您可以在可以被评分的模型中调用 averageRating()。返回值是所有评分的算术平均值,作为 float

如果我们留空参数,我们将得到 0.00,因为没有其他 Page 模型已经对页面进行了评分。但由于用户已经对页面进行了评分,我们将只从 User 模型计算平均值,因为只有它们对页面进行了投票,严格通过传递类名作为参数。

$page = Page::find(1);

$user1->rate($page, 10);
$user2->rate($page, 6);

$page->averageRating(); // 0.00
$page->averageRating(User::class); // 8.00, as float

在我们的示例中,User 类既可以评分也可以被评分,如果我们引用其类,我们可以留空参数

$user = User::find(1);

$user1->rate($user, 10);
$user2->rate($user, 6);

$user->averageRating(); // 8.00, as float
$user->averageRating(User::class); // 8.00, it is equivalent

关系也是基于此的

$page->raters()->get(); // Pages that have rated this page
$page->raters(User::class)->get(); // Users that have rated this page

$user->ratings()->get(); // Users that this user has rated
$user->ratings(Page::class)->get(); // Pages that this user has rated

🐛 测试

vendor/bin/phpunit

🤝 贡献

请参阅 CONTRIBUTING 了解详细信息。

🔒 安全性

如果您发现任何与安全相关的问题,请通过电子邮件 alex@renoki.org 而不是使用问题跟踪器。

🎉 致谢