Recommend this page to a friend! |
Download |
Info | Documentation | Files | Install with Composer | Download | Reputation | Support forum | Blog | Links |
Ratings | Unique User Downloads | Download Rankings | ||||
Not yet rated by the users | Total: 84 | All time: 10,045 This week: 131 |
Version | License | PHP version | Categories | |||
r8 1.0 | Custom (specified... | 5 | PHP 5, Libraries, Content management |
Description | Author | |||||||||||||||||||||||
This package can be used to add reviews, ratings and recommendations to a site. Innovation Award |
|
Laravel has always been missing a package like this, that supports dynamic rating with multiple Rating Types (ex. Like in Amazon or any e-commerce platform, Quality Rating, Customer Service Experience Ratings, etc.) with Integrated Reviews and Recommend Functionality.
The main Ideology behind this package is to make it easily adaptable for everyone's use case.
Reviews & Ratings system for Laravel 7. You can rate any of your models.
First, pull in the package through Composer.
composer require secrethash/r8
NOTE: The dev-master
is _UNDER HEAVY DEVELOPMENT_
You will need to publish and run the migrations.
php artisan vendor:publish --provider="Secrethash\R8\R8ServiceProvider" --tag="migrations"
Run the migrations
php artisan migrate
Setup the model that will be reviewed, rated & recommended.
<?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;
}
Things will be kept simple. But to understand usage, you must understand the methodology behind it.
The Methodology used is: | Utility | Relation | With | |---------|------------|-----------| |Review | HasMany | Ratings | |Ratings | BelongsTo |RatingTypes| |Recommend|is a part of| Reviews |
Taking Simple Laravel Examples.
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
NOTE: A Review must be created first to Create and link One or Many ratings with it.
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);
}
}
> Assumption: A Rating Type has already been created with '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();
}
}
Similarly, Secrethash\R8\Models\RateType
can be used to create Rating Types like _Product Quality_, _Customer Service_, _Delivery_, etc.
| Fillable | Description | | -------- | ------------- | | slug | Sluggish Name | | name | Full Name |
To keep things simple, Operations like Counting Reviews and Ratings are done through well defined relations, the Laravel Way.
<?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]);
}
}
Assuming the counting will be performed directly in the blade.php
file.
resources/views/post/show.blade.php
@foreach($post->reviews as $review)
...
Total Ratings: {{ $review->ratings->count() }}
...
@endforeach
Laravel manages collections in a smart way. And as we know that "All multi-result sets returned by Eloquent are instances of the Illuminate\Database\Eloquent\Collection
object" <sup>[Laravel Docs][1]</sup>
All you need to do is pass in the name of the table (here value
) in the average()
collection helper method.
resources/views/post/show.blade.php
@foreach($post->reviews as $review)
...
Average Ratings: {{ $review->ratings->average('value') }}
...
@endforeach
Contributions are welcomed and appreciated. Feel free to create a Pull Request or an Issue.
As this package is still under development, the database structure might change in future. The structure ER Diagram is provided as XML File and also as an Image File.
This project is Licensed under MIT. See the License File for more information.
> This repository has been forked from codebyray/laravel-review-rateable
It was forked initially as a head-start and a lot has been changed since then. The whole concept and methodology has been changed.
Please note that the original code does not matches the code from this repository as a lot has been changed.
[1]: https://laravel.com/docs/7.x/eloquent-collections "Laravel Docs for Eloquent Collections"
Files (18) |
File | Role | Description | ||
---|---|---|---|---|
database (1 directory) | ||||
src (1 file, 3 directories) | ||||
tests (1 file) | ||||
.editorconfig | Data | Auxiliary data | ||
CHANGELOG.md | Data | Auxiliary data | ||
composer.json | Data | Auxiliary data | ||
database_structure.png | Data | Auxiliary data | ||
db.rd.xml | Data | Auxiliary data | ||
LICENSE | Lic. | License text | ||
phpunit.xml | Data | Auxiliary data | ||
README.md | Doc. | Documentation |
Files (18) | / | database | / | migrations |
File | Role | Description |
---|---|---|
create_rate_types_table.php.stub | Class | Class source |
create_ratings_table.php.stub | Class | Class source |
create_reviews_table.php.stub | Class | Class source |
Files (18) | / | src |
File | Role | Description | ||
---|---|---|---|---|
Contracts (1 file) | ||||
Models (3 files) | ||||
Traits (1 file) | ||||
R8ServiceProvider.php | Class | Class source |
Files (18) | / | src | / | Models |
File | Role | Description |
---|---|---|
RateType.php | Class | Class source |
Rating.php | Class | Class source |
Review.php | Class | Class source |
The PHP Classes site has supported package installation using the Composer tool since 2013, as you may verify by reading this instructions page. |
Install with Composer |
Version Control | Unique User Downloads | Download Rankings | |||||||||||||||
100% |
|
|
Applications that use this package |
If you know an application of this package, send a message to the author to add a link here.