fajarwz/laravel-review

Laravel 的灵活强大评论系统,允许任何模型进行评论和被评论。

1.2.0 2024-08-27 14:39 UTC

This package is auto-updated.

Last update: 2024-09-27 14:59:49 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)。请参阅许可文件以获取更多信息。