fajarwz / laravel-review
Laravel 的灵活强大评论系统,允许任何模型进行评论和被评论。
Requires (Dev)
- larastan/larastan: ^2.0
- laravel/pint: ^1.17
- orchestra/testbench: ^9.2
This package is auto-updated.
Last update: 2024-09-27 14:59:49 UTC
README
安装
您可以通过 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 讨论论坛。这将有助于将问题集中在错误报告和功能请求上。
安全漏洞
致谢
许可
MIT 许可证 (MIT)。请参阅许可文件以获取更多信息。