Header Ads

Header ADS

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

Theme images by fpm. Powered by Blogger.