mtvs / laravel-reviews
Laravel 框架的评价和评分
Requires
- laravel/framework: ^9.0
- mtvs/eloquent-approval: ^5.0
Requires (Dev)
- orchestra/testbench: ^7.0
- phpunit/phpunit: ^9.0
README
Laravel Reviews
Laravel 的 Eloquent 模型的评分和评论
用户可以对可评论的模型进行评分和评论。然后这些评论可以被批准并显示出来。
您可以在可评论的模型上加载评分平均数和计数并显示它们。
它将提供根据贝叶斯公式对可评论的模型根据其评分平均数进行排序的能力。
安装和设置
composer require mtvs/laravel-reviews
然后发布您代码库中应存在的文件,以便您可以自定义。它们是评论模型、其数据库迁移、其数据库工厂、HTTP 控制器和配置文件。
php artisan vendor:publish
接下来,在您的路由文件中,在路由器上调用以下宏以注册默认路由。您可以使用 artisan route:list
来查看路由。
Route::reviews();
然后,如果您想使用 UI 组件,运行以下命令来安装它们。这些组件是用 Vue 和 Bootstrap 编写的。
该命令还会在公共目录中安装一个样式表和一套字体图标,供组件使用。别忘了在您的视图布局文件中包含样式表。
php artisan reviews:ui
如果您尚未在 app.js
文件中启用自动注册,您需要手动注册组件。
Vue.component('reviews', require('./components/reviews/Reviews.vue').default); Vue.component('reviews-current', require('./components/reviews/ReviewsCurrent.vue').default); Vue.component('reviews-form', require('./components/reviews/ReviewsForm.vue').default); Vue.component('reviews-list', require('./components/reviews/ReviewsList.vue').default); Vue.component('reviews-pagination', require('./components/reviews/ReviewsPagination.vue').default); Vue.component('reviews-single', require('./components/reviews/ReviewsSingle.vue').default); Vue.component('reviews-stars', require('./components/reviews/ReviewsStars.vue').default); Vue.component('approval-status', require('./components/approval/ApprovalStatus.vue').default); Vue.component('approval-buttons', require('./components/approval/ApprovalButtons.vue').default);
现在让我们设置模型。有一些特质是为了导入到评论模型、用户模型以及将要被评论的模型中。当安装时,评论模型的特质已经导入。但其他特质需要手动安装。
namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Mtvs\Reviews\PerformsReviews; class User extends Authenticatable { use PerformsReviews; }
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Mtvs\Reviews\Reviewable; class Product extends Model { use Reviewable; }
您还必须在评论配置文件中指定可评论的模型。
'reviewables' => [ \App\Models\Product::class, ],
最后,请记住运行数据库迁移并编译视图组件。您还可以使用提供的工厂来初始化评论。
用法
评分组件
要显示可评论模型评分的平均数和计数,您可以调用 <x-ratings>
。
<x-ratings :average="$product->ratings_avg" :count="$product->ratings_count"/>
不要忘记通过在模型上调用 loadRatings()
或者在查询时通过调用 withRatings()
来预加载这些值。
评论组件
要显示可评论模型的评论列表以及发布评论的表单,您可以调用 <x-reviews>
。
<x-reviews :reviewable="$product"/>
它还包含对 <x-ratings>
的调用。
您可以通过将评分组件包裹在 <a href="reviews">
中来将其链接到页面上半部分的评论组件,该链接指向评论组件。
基于评分的排名
在查询时,可以根据评分对可评论模型进行排序。要做到这一点,请对查询调用 highestRated()
。它使用贝叶斯平均公式计算每个模型的分数并按从高到低的分数排序。
评论的批准
评论模型使用来自 mtvs/eloquent-approval 的 Approvable
特质来管理哪些评论允许显示。