compubel/laravel-rating

将评分关联到任何Eloquent模型

1.3.0 2021-07-29 08:37 UTC

This package is auto-updated.

Last update: 2024-09-29 05:28:17 UTC


README

Latest Version on Packagist Build Status codecov Quality Score StyleCI Total Downloads

将评分关联到任何Eloquent模型。

此包基于rennokki/rating并做了一些改进

  • 错误修正
  • 异常
  • 评分总和
  • 更多测试

安装

使用Composer安装此包

$ composer require compubel/laravel-rating

该包将自动注册自身。

如果您的Laravel安装不支持包发现,请在config/app.php文件中的providers数组中添加此行

Compubel\Rating\RatingServiceProvider::class,

可选:如果要将表名更改为“ratings”以外的其他名称,可以使用以下命令发布配置文件

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

使用以下命令发布迁移

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

迁移发布后,可以通过运行迁移来创建评分表

php artisan migrate

用法

准备模型

要允许模型对其他模型进行评分,它应该使用CanRate特性并实现Rater协议。

use Compubel\Rating\CanRate;
use Compubel\Rating\Contracts\Rater;

class User extends Model implements Rater
{
    use CanRate;

    // ...
}

每个可以评分的模型应该使用CanBeRated特性并实现Rateable协议。

use Compubel\Rating\CanBeRated;
use Compubel\Rating\Contracts\Rateable;

class Post extends Model implements Rateable
{
    use CanBeRated;

    // ...
}

如果您的模型既能评分也能被评分,应使用Rate特性和Rating协议。

use Compubel\Rating\Rate;
use Compubel\Rating\Contracts\Rating;

class Member extends Model implements Rating
{
    use Rate;

    // ...
}

评分模型

要评分其他模型,只需调用rate()方法。将评分分数作为rate()方法的第二个参数。它可以是字符串、整数或浮点数。

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

如果您想确保模型只评分一次,请在rate()方法的第三个参数中添加false

$user->rate($post, 10, false);

使用hasRated()方法检查模型是否已评分。

$user->rate($post, 10);
$user->hasRated($post); // true

使用averageRating()方法获取模型的平均评分。将评分者的类名作为参数传递。返回值是所有评分的算术平均值,以float形式。

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

使用countRatings()方法获取评分计数。

$user->rate($post, 10);
$user->rate($post, 10);
$post->countRatings(User::class); // 2, as integer

测试

您可以使用以下命令运行测试

$ composer test

变更日志

请参阅CHANGELOG以获取有关最近更改的更多信息。

贡献

请参阅CONTRIBUTING以获取详细信息。

安全

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

替代方案

致谢

许可证

MIT。请参阅许可证文件以获取更多信息。