---
title: "Cachované agregáty — Reviews for Laravel | Roundly"
description: "Uložte reviews_count a reviews_avg do tabuľky predmetu, nechajte ich automaticky aktualizovať a prepočítajte cez reviews:recount."
url: https://roundly-consulting.com/sk/open-source/navody/reviews-for-laravel/cachovane-agregaty
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Reviews for Laravel](https://roundly-consulting.com/sk/open-source/navody/reviews-for-laravel.md)

# 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.

```bash
php artisan vendor:publish --tag="reviews-aggregate-migrations"
php artisan migrate
```

```php
// 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();
});
```

```php
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, cieleným updatom zapíše len tieto dva stĺpce (bez udalostí modelu, bez zmeny updated\_at a bez iných neuložených zmien na vašom modeli) a ignoruje odpovede vlastníka aj predmety bez traitu:

```php
// 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 write the two columns on demand
```

Súbežne pridané recenzie sa vždy započítajú. Prepočet beží v jednej transakcii pod zámkom riadka predmetu a počíta zamykajúcim čítaním; v transakcii observer zamkne predmet ešte pred zápisom riadka recenzie. Všetci zapisovatelia jedného predmetu tak berú zámky v rovnakom poradí, preto sa dve schválené recenzie, ktoré prídu naraz, spracujú postupne — bez deadlocku a bez strateného započítania.

## Vlastné názvy stĺpcov

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

```php
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:

```bash
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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/reviews-for-laravel.md)
