rennokki / rating
Laravel Eloquent Rating 允许您为任何模型分配评分。
Requires
- illuminate/database: ^8.83|^9.0.1
- illuminate/support: ^8.83|^9.0.1
Requires (Dev)
- laravel/legacy-factories: ^1.3
- mockery/mockery: ^1.5
- orchestra/testbench: ^6.28|^7.0
- orchestra/testbench-core: ^6.28|^7.0
- phpunit/phpunit: ^9.5.13
- dev-master
- 3.1.0
- 3.0.1
- 3.0.0
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.1
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.1
- 2.0.0
- 1.1.0
- 1.0.2
- 1.0.1
- 1.0.0
- dev-dependabot/github_actions/codecov/codecov-action-4.2.0
- dev-dependabot/github_actions/actions/cache-4.0.2
- dev-dependabot/composer/laravel/legacy-factories-tw-1.4
- dev-dependabot/github_actions/actions/checkout-4
This package is auto-updated.
Last update: 2024-09-08 08:33:07 UTC
README
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 而不是使用问题跟踪器。