NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Reviews for Laravel

Cachované agregáty

Priebežné agregáty sa počítajú na požiadanie. Pri vyťažených výpisoch uložte reviews_count a reviews_avg priamo do tabuľky hodnoteného modelu a nechajte balík, aby ich udržiaval:

  • Nastavte reviews.cache_aggregates na true (REVIEWS_CACHE_AGGREGATES=true).
  • Publikujte stub reviews-aggregate-migrations, premenujte zástupnú tabuľku na tabuľku vášho modelu a spustite migráciu.
  • Pridajte tomuto modelu trait MaintainsReviewAggregates popri HasReviews.
php artisan vendor:publish --tag="reviews-aggregate-migrations"
php artisan migrate
// database/migrations/…_add_review_aggregates_to_reviewable_table.php
Schema::table('products', function (Blueprint $table): void {   // was 'reviewable_table'
    $table->unsignedInteger('reviews_count')->default(0);
    $table->decimal('reviews_avg', 8, 4)->nullable();
});
use RoundlyConsulting\Reviews\Concerns\HasReviews;
use RoundlyConsulting\Reviews\Concerns\MaintainsReviewAggregates;

class Product extends Model
{
    use HasReviews;
    use MaintainsReviewAggregates;
}

Stub publikujte raz pre každú tabuľku — každé publikovanie vytvorí migráciu s novou časovou pečiatkou.

Ako sa udržiavajú aktuálne

Observer prepočíta stĺpce vždy, keď sa recenzia najvyššej úrovne uloží, zmaže alebo obnoví — aktualizujú sa teda pri vytvorení, úprave, schválení, zamietnutí aj zmazaní. Používa rovnakú logiku (schválené, najvyššia úroveň) ako priebežné agregáty, ukladá potichu (bez udalostí na vašom modeli) a ignoruje odpovede vlastníka aj predmety bez traitu:

// Read and sort on plain columns — no aggregate query per row:
$top = Product::query()->orderByDesc('reviews_avg')->take(10)->get();

$product->reviews_count;   // 320
$product->reviews_avg;     // 4.6000

$product->recountReviews(); // recompute and save quietly on demand

Vlastné názvy stĺpcov

Ak máte existujúcu schému, prepíšte dve metódy s názvami stĺpcov:

class Product extends Model
{
    use HasReviews;
    use MaintainsReviewAggregates;

    public function aggregateCountColumn(): string
    {
        return 'rating_count';
    }

    public function aggregateAvgColumn(): string
    {
        return 'rating_average';
    }
}

Prepočet

Po pridaní stĺpcov naplňte existujúce riadky, alebo ich kedykoľvek prepočítajte od nuly. Príkaz prechádza model po dávkach po 100 a skončí chybou, ak trieda nie je Eloquent model alebo nepoužíva trait:

php artisan reviews:recount "App\Models\Product"

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.