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

资助包维护!
rennokki

dev-master 2023-06-23 07:24 UTC

This package is auto-updated.

Last update: 2024-09-23 10:11:22 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而不是使用问题跟踪器。

🎉 致谢