sojeda / rating
Laravel Eloquent Rating 允许您为任何模型分配评分。
Requires
- php: ^7.4
- illuminate/auth: ^5.8|^6.0|^7.0
- illuminate/container: ^5.8|^6.0|^7.0
- illuminate/contracts: ^5.8|^6.0|^7.0
- illuminate/database: ^5.8|^6.0|^7.0
- illuminate/support: ^5.8|^6.0|^7.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- orchestra/testbench: ^5.0
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^5.0
README
Laravel Eloquent Rating
Laravel Eloquent Rating 允许您为任何模型分配评分。
安装
安装包
$ composer require sojeda/rating
如果您的 Laravel 版本不支持包发现,请在您的 config/app.php
文件中的 providers
数组中添加此行
Laraveles\Rating\RatingServiceProvider::class,
发布配置文件和迁移文件
$ php artisan vendor:publish --provider='Laraveles\Rating\RatingServiceProvider'
迁移数据库
$ php artisan migrate
准备模型
要允许模型对其他模型进行评分,它应使用 CanRate
特性并实现 Qualifier
合同。
use Laraveles\Rating\Traits\CanRate; use Laraveles\Rating\Contracts\Qualifier; class User extends Model implements Qualifier { use CanRate; ... }
可以被评分的其他模型应使用 CanBeRated
特性和 Rateable
合同。
use Laraveles\Rating\Traits\CanBeRated; use Laraveles\Rating\Contracts\Rateable; class User extends Model implements Rateable { use CanBeRated; ... }
如果您的模型既可以评分,也可以被其他模型评分,您应使用 Rate
特性和 Rating
合同。
use Laraveles\Rating\Traits\Rate; use Laraveles\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->qualifiers()->get(); // Pages that have rated this page $page->qualifiers(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
事件
ModelRated
您可以在应用程序的 EventServiceProvider 中定义自己的监听器。例如。
<?php use Laraveles\Rating\Events\ModelRated; use Laraveles\Rating\Events\ModelUnrated; /** * The event listener mappings for the application. * * @var array */ protected $listen = [ ModelRated::class => [ \App\Listeners\MyListenerRating::class, ], ModelUnrated::class => [ \App\Listeners\MyListenerUnrating::class, ], ];
变更日志
请参阅 CHANGELOG 以获取有关最近更改的更多信息。
测试
$ composer test
贡献
请参阅 CONTRIBUTING 以获取详细信息。
安全
如果您发现任何与安全相关的问题,请通过电子邮件 soj3da@gmail.com 而不是使用问题跟踪器。
鸣谢
许可
MIT 许可证 (MIT)。请参阅 许可文件 以获取更多信息。