secrethash/r8

Laravel的评论与评分系统

v1.0.0 2020-05-30 14:55 UTC

This package is auto-updated.

Last update: 2024-09-23 22:59:40 UTC


README

Latest Stable Version Total Downloads Dependents Latest Unstable Version License

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分支。

最初分支是为了快速启动,自那时起已经做了很多改变。整个概念和方法已经改变。

请注意,原始代码与此存储库中的代码不匹配,因为已经做了很多改变。