NewWe open-sourced 50+ Laravel packages
Custom AI apps, agents and automation — Roundly ConsultingRoundly
All packages
Reviews for Laravel

Verified reviews

A verified boolean marks verified purchases or verified reviewers — the trust signal shoppers look for. Set it on create, flip it with Reviews::verify() / unverify(), or change it in an update:

use RoundlyConsulting\Reviews\DataTransferObjects\UpdateReviewData;
use RoundlyConsulting\Reviews\Models\Review;

// On create — verified() takes an optional bool:
Reviews::for($product)->by($customer)->rating(5)->verified()->create();
Reviews::for($product)->by($customer)->rating(5)->verified($hasPurchased)->create();

// Later, through an update:
Reviews::update($review, new UpdateReviewData(verified: true));

// Or flip it later — idempotent, fires ReviewVerified when the flag changes:
Reviews::verify($review);
Reviews::unverify($review);

// The model helpers call the same manager methods:
$review->markVerified();
$review->markUnverified();

// Filter:
Review::query()->for($product)->verified()->get();
Review::query()->for($product)->unverified()->get();

The package stores the flag; deciding who counts as verified — a paid order, a completed booking — is up to your app. Changing it never resets the moderation status. Reviews::verify() and unverify() — and the markVerified() / markUnverified() model helpers, which call them — are idempotent and dispatch ReviewVerified (with bool $verified, the new state) only when the flag actually changes. The update route fires ReviewUpdated instead.

The flag is indexed, exposed as verified in ReviewResource, and available as a factory state (Review::factory()->verified()).

Show your open-source love

This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.

More ways to support, including crypto

By donating, you agree to our donation terms.

Want this built into your product?

We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.