secrethash / r8
Laravel的评论与评分系统
Requires
- php: ^7.2
- illuminate/auth: ^5.8|^6.0|^7.0
- illuminate/container: ^5.8|^6.0|^7.0
- illuminate/contracts: ^5.8|^6.0|^7.0
- illuminate/database: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0
- illuminate/support: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0
- nesbot/carbon: ^2.17
Requires (Dev)
- orchestra/testbench: ~3.5.0|~3.6.0|^4.0
- phpunit/phpunit: ^6.3|^7.0|^8.0
This package is auto-updated.
Last update: 2024-09-23 22:59:40 UTC
README
Laravel一直缺少这样一个包,它支持使用多种评分类型(例如,在亚马逊或任何电子商务平台上,质量评分、客户服务体验评分等)的动态评分,并具有集成评论和推荐功能。
该包背后的主要理念是使其易于适应每个人的使用场景。
Laravel 7的评论与评分系统。您可以给任何模型评分。
- 自定义评分类型(例如:产品质量、配送速度、价格等),没有任何限制。
- 显示总体和平均评分
- 方法链
- 您可以选择评分的模型是否推荐。
安装
首先,通过Composer拉取包。
composer require secrethash/r8
注意:dev-master
正在积极开发中
您需要发布并运行迁移。
php artisan vendor:publish --provider="Secrethash\R8\R8ServiceProvider" --tag="migrations"
运行迁移
php artisan migrate
设置
设置将被评论、评分和推荐的模型。
<?php namespace App; use Secrethash\R8\Contracts\R8; use Secrethash\R8\Traits\R8Trait; use Illuminate\Database\Eloquent\Model; class Post extends Model implements R8 { use R8Trait; }
使用方法
事情将保持简单。但为了了解使用方法,您必须理解其背后的方法。
方法
使用的方法是
获取
以简单的Laravel示例。
App\Http\Controllers\PostController.php
public function show($id) { $post = Post::find($id); return view('post.show')->with('post', $post); }
评论与推荐
resources/views/post/show.blade.php
@foreach($post->reviews as $review) <h2> {{ $review->title }} </h2> <p> {{ $review->body }} </p> <span> Recommended: {{ $review->recommend }} </span> <span> By: {{ $review->author->name }} </span> @endforeach
评分
注意:首先必须创建一个评论,然后才能与之创建一个或多个评分的链接。
resources/views/post/show.blade.php
@foreach($post->reviews as $review) <h2> {{ $review->title }} </h2> <p> {{ $review->body }} </p> <span> Recommended: {{ $review->recommend }} </span> <span> By: {{ $review->author->name }} </span> @foreach ($review->ratings as $rating) {{ $rating->type->name }} {{ $rating->value }} @endforeach @endforeach
创建
评论
App\Http\Controllers\ReviewController.php
<?php namespace App\Http\Controllers; use App\Post; class ReviewController { /** * Store a newly created resource in storage. * * @param $id * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store($id, Request $request) { $post = Post::find($id); // Create Review $review = $post->reviews()->create([ 'title' => 'One More Bad Sample Review', 'body' => 'This is a another new sample review. This one has 4 Type Reviews.', 'recommend' => 'No', ]); // Associate Author User ID $review->author()->associate(auth()->user()->id); } }
评分
假设:已经使用
'slug' => 'customer-service'
创建了一个评分类型。
App\Http\Controllers\ReviewController.php
<?php namespace App\Http\Controllers; use App\Post; use Secrethash\R8\Models\RateType; class ReviewController { /** * Store a newly created resource in storage. * * @param $id * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store($id, Request $request) { $post = Post::find($id); // Getting the ID $type = RateType::where('slug', 'customer-service')->first(); // Create Review $review = $post->reviews()->create([ 'title' => 'One More Bad Sample Review', 'body' => 'This is a another new sample review. This one has 4 Type Reviews.', 'recommend' => 'Yes', // Enum: accepts 'Yes' or 'No' ]); // Associate Author User ID $review->author()->associate(auth()->user()->id); // Creating Rating $rating = $review->ratings()->create([ 'value' => 5 ]); // Associate Rating Type ID $rating->type()->associate($type->id); // Saving Everything $review->save(); $rating->save(); } }
评分类型
同样,可以使用Secrethash\R8\Models\RateType
创建类似“产品质量”、“客户服务”、“配送”等评分类型。
其他操作
为了保持简单,像计数评论和评分这样的操作是通过定义良好的关系,以Laravel的方式完成的。
计数
评论
<?php namespace App\Http\Controllers; use App\Post; class ReviewController { public function show($id) { $post = Post::find($id); $reviews = $post->reviews->count(); $approved = $post->reviews ->where('approved', 1) ->count(); return view('post.show')->with(['post' => $post, 'reviews' => $reviews, 'approved' => $approved]); } }
评分
假设计数将直接在blade.php
文件中执行。
resources/views/post/show.blade.php
@foreach($post->reviews as $review) ... Total Ratings: {{ $review->ratings->count() }} ... @endforeach
平均值
评分
Laravel以智能的方式管理集合。众所周知,“Eloquent返回的所有多结果集都是Illuminate\Database\Eloquent\Collection
对象”的实例”Laravel 文档您只需将表名(此处为value
)传递给集合辅助方法中的average()
即可。
resources/views/post/show.blade.php
@foreach($post->reviews as $review) ... Average Ratings: {{ $review->ratings->average('value') }} ... @endforeach
贡献
欢迎并感谢贡献。请随时创建拉取请求或问题。
数据库结构
由于此包仍在开发中,数据库结构可能在将来发生变化。结构ER图以XML文件和图像文件的形式提供。
许可
本项目采用MIT许可。有关更多信息,请参阅许可文件。
注意
此存储库已从codebyray/laravel-review-rateable分支。
最初分支是为了快速启动,自那时起已经做了很多改变。整个概念和方法已经改变。
请注意,原始代码与此存储库中的代码不匹配,因为已经做了很多改变。