shop23/laravel-review

适用于Laravel的灵活强大的评论系统,让任何模型都可以进行评论和被评论。

dev-master 2024-09-13 09:14 UTC

This package is auto-updated.

Last update: 2024-09-13 09:15:53 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status

安装

您可以通过composer安装此包

composer require fajarwz/laravel-review

您可以使用以下命令发布和运行迁移

php artisan vendor:publish --provider="Fajarwz\LaravelReview\LaravelReviewServiceProvider"
php artisan migrate

配置

模型配置

在您的模型中包含必要的特性

可被评论/可评论模型

对于可被评论的模型,使用CanBeReviewed特性

use Fajarwz\LaravelReview\Traits\CanBeReviewed;

class Mentor extends Model
{
    use CanBeReviewed;
    // Optionally, use CanReview if the model can also act as a reviewer
    // use CanReview;
}

评论者模型

对于可以提交评论的模型,使用CanReview特性

use Fajarwz\LaravelReview\Traits\CanReview;

class Mentee extends Model
{
    use CanReview;
}

使用方法

创建评论

要创建新的评论

$mentee = Mentee::find(1);
$mentor = Mentor::find(1);

// Create an approved review
$mentee->review($mentor, 4.5);

// Create an unapproved review
$mentee->review($mentor, 3.0, 'Needs improvement', false);

review()方法接受一个可被评论的模型和一个评分。可选地,设置评论内容以添加评论,并将$isApproved参数设置为false以创建一个未批准的评论。

只有批准的评论会在review_summaries表中计算。更新未批准的评论不会影响摘要。

如果评论者模型已针对同一可被评论的模型提交了评论,将抛出Fajarwz\LaravelReview\Exceptions\DuplicateReviewException

要更新评论,请使用updateReview()

更新评论

要更新现有的评论

$mentee->updateReview($mentor, 5, 'Mentor is even better now!');

updateReview()方法接受三个参数:一个可被评论的模型、一个评分以及可选的评论文本。

取消评论

要取消现有的评论

$mentee->unreview($mentor);

如果评论者模型之前未对模型进行过评论,将抛出Fajarwz\LaravelReview\Exceptions\ReviewNotFoundException

批准评论

要批准评论

$review = $mentor->receivedReviews()->first();
$review->approve();

取消批准评论

要取消批准评论

$review = $mentor->receivedReviews()->first();
$review->unapprove();

查询评论

获取所有收到的评论

默认情况下,只检索批准的评论

$mentor->receivedReviews()->get();

要获取最新的收到的评论

$mentor->latestReceivedReviews()->paginate();

要获取评分最高的收到的评论

$mentor->topRatedReceivedReviews()->paginate();

要包括批准和未批准的评论

$mentor->receivedReviews()->withUnapproved()->get();

要包括评论者信息

Mentor::with('receivedReviews.reviewer')->paginate();

此查询将预加载每个收到的评论的评论者信息。

注意:请根据应用程序的需求考虑使用适当的预加载策略以优化查询性能。

获取指定评论者收到的评论

要检索评论者对可被评论者给出的评论

$review = $mentor->getReceivedReview($mentee);

此方法返回单个Review实例或null(如果不存在评论)。

要包括未批准的评论在搜索中,将true作为第二个参数传递

$includeUnapproved = true;
$review = $mentor->getReceivedReview($mentee, $includeUnapproved);

获取所有给出的评论

要获取一个模型给出的所有评论

$mentee->givenReviews()->get();

要包括可被评论模型的信息

Mentee::with('givenReviews.reviewable')->paginate();

这将预加载模型给出的每个评论的可被评论模型。

获取指定可被评论模型给出的评论

要检索可被评论者收到的评论

$review = $mentee->getGivenReview($mentor);

此方法返回单个Review实例或null(如果不存在评论)。

要包括未批准的评论在搜索中,将true作为第二个参数传递

$includeUnapproved = true;
$review = $mentor->getGivenReview($mentee, $includeUnapproved);

检查评论

检查可被评论模型是否收到了来自特定评论者的评论

if ($mentor->hasReceivedReview($mentee)) {
    // The mentor has received a review from the mentee
}

要包括未批准的评论在检查中,将true作为第二个参数传递

$includeUnapproved = true;
if ($mentor->hasReceivedReview($mentee, $includeUnapproved)) {
    // The mentor has received a review from the mentee
}

检查当前模型是否已向指定模型给出评论

if ($mentee->hasGivenReview($mentor)) {
    // The mentee has given a review to the mentor
}

要包括未批准的评论在检查中,将true作为第二个参数传递

$includeUnapproved = true;
if ($mentee->hasGivenReview($mentor, $includeUnapproved)) {
    // The mentee has given a review to the mentor
}

评论模型

Fajarwz\LaravelReview\Models\Review模型包括用于管理和查询评论的方法

批准评论

要批准一条评论,请使用approve()方法。这将approved_at时间戳设置为当前日期和时间,表示评论已被批准。同时,它还会更新相关模型的评论摘要。

use Fajarwz\LaravelReview\Models\Review;

$review = Review::find($id);
$review->approve();

取消批准评论

要取消批准评论,请使用unapprove()方法。这将approved_at时间戳设置为null,表示评论不再被批准。如果需要,它还会更新相关模型的评论摘要以减少评分计数。

$review = Review::find($id);
$review->unapprove();

检查评论是否被批准

要检查评论是否被批准,请使用isApproved()方法。如果approved_at时间戳不为null,则此方法返回true,否则返回false。

$review = Review::find($id);
if ($review->isApproved()) {
    // The review is approved
}

查询批准的评论

默认情况下,评论模型应用全局作用域以仅包含批准的评论。要查询仅批准的评论,您可以使用模型的标准查询方法

$approvedReviews = Review::all();

查询未批准的评论

要包含未批准的评论到您的查询中,请使用withUnapproved()方法。这将移除过滤未批准评论的全局作用域,允许您查询已批准和未批准的评论。

$allReviews = Review::withUnapproved()->get();

获取评论者

要获取评论项目的模型,请使用reviewer()方法。此方法返回与评论者模型的关联。

$review = Review::find($id);
$reviewer = $review->reviewer;

获取可评论的模型

要获取被评论的模型,请使用reviewable()方法。此方法返回与被评论模型的关联。

$review = Review::find($id);
$reviewable = $review->reviewable;

评论摘要模型

Fajarwz\LaravelReview\Models\ReviewSummary模型表示特定可评论模型的评论摘要。

属性

  • average_rating:可评论模型所有评论的平均评分。
  • review_count:可评论模型的总评论数。

获取可评论的模型

reviewable()方法定义了一个与被评论模型的关联的多态关系。它允许您访问属于此评论摘要的模型。

use Fajarwz\LaravelReview\Models\ReviewSummary;

$reviewSummary = ReviewSummary::find($id);
$reviewable = $reviewSummary->reviewable;

测试

composer test

变更日志

有关最近更改的更多信息,请参阅变更日志

贡献

我们欢迎贡献。请提交问题拉取请求,包含您的建议或改进。

获取帮助

有关问题、讨论或寻求帮助,请使用GitHub讨论论坛。这将有助于将问题集中在错误报告和功能请求上。

安全漏洞

请联系hi@fajarwz.com

鸣谢

许可协议

MIT许可协议(MIT)。有关更多信息,请参阅许可文件