sojeda/rating

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

v2.2.3 2020-05-27 00:10 UTC

This package is auto-updated.

Last update: 2024-09-29 05:49:31 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License StyleCI codecov

PayPal

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)。请参阅 许可文件 以获取更多信息。