Laravel Customer Review System
//customer review route
Route::post('/reviews/store', [ReviewController::class, 'store'])
->name('reviews.store');
class Room extends Model
{
public function reviews()
{
return $this->hasMany(Review::class);
}
}
class Review extends Model
{
public function customer()
{
return $this->belongsTo(Customer::class);
}
public function room()
{
return $this->belongsTo(Room::class);
}
}
class ReviewController extends Controller
{
public function store(Request $request)
{
// Check if a customer is logged in
if (!Auth::guard('customer')->check()) {
return back()->with('error', 'You must be logged in as a customer to submit a review.');
}
$request->validate([
'room_id' => 'required|exists:rooms,id',
'review' => 'required|string',
'rating' => 'required|integer|min:1|max:5',
]);
Review::create([
'room_id' => $request->room_id,
'customer_id' => Auth::guard('customer')->id(),
'review' => $request->review,
'rating' => $request->rating,
]);
return back()->with('success', 'Review submitted successfully.');
}
}
{{-- Customer Review form --}}
<div class="container py-5">
<div class="row">
<div class="col-md-12">
<div class="customer-reviews">
<div class="row">
<div class="col-md-12">
<h2>Customer Reviews</h2>
@php
$totalReviews = $single_room_data->reviews->count();
$averageRating = $totalReviews > 0 ? round($single_room_data->reviews->avg('rating'), 1) : 0;
@endphp
@if($totalReviews > 0)
<p><strong>Average Rating:</strong> ⭐ {{ $averageRating }}/5 ({{ $totalReviews }} Reviews)</p>
@else
<p>No reviews yet.</p>
@endif
<hr>
</div>
</div>
<div class="reviews-list">
@foreach($single_room_data->reviews as $review)
<div class="review-item">
<strong>{{ $review->customer->name }}</strong>
<span class="rating">⭐ {{ $review->rating }}/5</span>
<p>{{ $review->review }}</p>
</div>
@endforeach
</div>
@auth('customer')
@php
$existingReview = \App\Models\Review::where('room_id', $single_room_data->id)
->where('customer_id', Auth::guard('customer')->id())
->first();
@endphp
@if(!$existingReview)
<div class="review-form">
<h3>Write a Review</h3>
<form action="{{ route('reviews.store') }}" method="post">
@csrf
<input type="hidden" name="room_id" value="{{ $single_room_data->id }}">
<div class="form-group">
<label>Rating</label>
<select name="rating" class="form-control" required>
<option value="5">5 - Excellent</option>
<option value="4">4 - Good</option>
<option value="3">3 - Average</option>
<option value="2">2 - Poor</option>
<option value="1">1 - Terrible</option>
</select>
</div>
<div class="form-group">
<label>Review</label>
<textarea name="review" class="form-control" required></textarea>
</div>
<button type="submit" class="btn btn-primary mt-2">Submit Review</button>
</form>
</div>
@else
<p>You have already submitted a review for this room.</p>
@endif
@else
<p><a href="{{ route('customer_login') }}">Login</a> to submit a review.</p>
@endauth
</div>
</div>
</div>
</div>
//auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'customer' => [
'driver' => 'session',
'provider' => 'customers',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin::class,
],
'customers' => [
'driver' => 'eloquent',
'model' => App\Models\Customer::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
No comments