shop23 / 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-13 09:15:53 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)。有关更多信息,请参阅许可文件。