Displaying Product Ratings on Your Laravel E-commerce Site

Stefan Bogdanescu
Founder & Senior Architect · 30 July 2026

In an e-commerce application built with Laravel, displaying product ratings is crucial for enhancing user trust and driving sales. If you’ve already implemented the rating functionality but are struggling to display these ratings on your homepage or category listing pages, this guide will walk you through the process step by step.

Understanding Your Current Setup

First, let’s clarify a few assumptions about your current setup:

  • You have a products table in your database with columns like id, name, description, etc.
  • There is an product_ratings table with columns like product_id, rating_value, and created_at.
  • Your homepage content section is rendered using Blade templates, likely in a layout file that extends the main application layout.

Displaying Ratings in Your Category Listing

To display product ratings in your category listing, you’ll need to:

  1. Fetch the products for the current category.
  2. Join the product_ratings table to get the average rating for each product.
  3. Pass this data to your Blade view and use it to render the ratings.

Here’s a step-by-step solution:

1. Modify Your Controller Method

Assuming you have a method like HomeController@index() that fetches products, modify it as follows to include the average rating:

use App\Models\Product;
use Illuminate\Support\Facades\DB;

public function index()
{
    $products = Product::select([
        'products.*',
        DB::raw('AVG(product_ratings.rating_value) as average_rating')
    ])
    ->join('product_ratings', 'products.id', '=', 'product_ratings.product_id')
    ->where('category_id', 1) // replace with your category id
    ->groupBy('products.id')
    ->paginate(20);

    return view('home.index')->with(['products' => $products]);
}

2. Update Your Blade Template

In your resources/views/home/index.blade.php file, update the product listing loop:

@foreach($products as $product)
    <div class="product">
        <h2>{{ $product->name }}</h2>
        <p>{{ $product->description }}</p>

        <!-- Display the rating -->
        @if(!is_null($product->average_rating))
            <div class="rating">
                @for ($i = 1; $i <= 5; $i++)
                    @if ($i <= intval($product->average_rating))
                        <span></span>
                    @else
                        <span>☆</span>
                    @endif
                @endfor
            </div>
        @else
            <p class="no-rating">No ratings yet.</p>
        @endif

        <!-- Your other product details -->
    </div>
@endforeach

Implementing a Better Approach

The above solution does work, but it has some performance issues for large datasets. A more efficient approach is to use Laravel’s Eloquent ORM and accessor methods.

First, add an averageRating method to your Product model:

use Illuminate\Database\Eloquent\Casts\Attribute;

class Product extends Model
{
    protected function averageRating(): Attribute
    {
        return Attribute::make(
            get: fn () => $this->productRatings()->avg('rating_value'),
        );
    }
}

Then, modify your controller method:

public function index()
{
    $products = Product::where('category_id', 1) // replace with your category id
        ->withCount('productRatings')
        ->orderBy('average_rating', 'desc')
        ->paginate(20);

    return view('home.index')->with(['products' => $products]);
}

Conclusion

Displaying product ratings in your category listing is a key step in enhancing the user experience on your e-commerce site. By following these instructions, you’ll be able to efficiently and accurately display the average rating for each product.

Remember, first-time customers often rely heavily on reviews and ratings when making purchasing decisions. Providing this information prominently can significantly increase conversion rates.

Don’t forget to test your changes thoroughly before deploying them to a production environment.

For more advanced techniques in handling user reviews and ratings, consider exploring the Laravel Company Blog. We regularly publish articles on Laravel e-commerce development best practices.

Our network