Hodnotenia a agregáty
HasReviews dá každému predmetu vzťahy a priebežné agregáty. Agregáty počítajú len schválené recenzie najvyššej úrovne — čakajúce, zamietnuté recenzie ani odpovede vlastníka skóre neovplyvnia:
$restaurant->reviews; // MorphMany (all rows, responses included)
$restaurant->topLevelReviews; // MorphMany (owner responses excluded)
$restaurant->approvedReviews; // approved, top-level only
$restaurant->averageRating(); // ?float, null when none
$restaurant->reviewsCount(); // int (all top-level, any status)
$restaurant->approvedReviewsCount(); // int (approved)
$restaurant->ratingDistribution(); // [5 => 120, 4 => 80, ...]
$restaurant->ratingSummary(); // RatingSummary DTO| Na modeli (HasReviews) | Na fasáde | Počíta |
|---|---|---|
averageRating() | for($x)->average() | Priemer schválených recenzií najvyššej úrovne s hodnotením; null, ak žiadne nie sú. |
approvedReviewsCount() | for($x)->count() | Schválené recenzie najvyššej úrovne (vrátane recenzií len s textom). |
ratingDistribution() | for($x)->distribution() | Schválené recenzie s hodnotením podľa hodnoty, od najvyššej. |
ratingSummary() | for($x)->summary() | Všetko uvedené plus počty fotografií ako RatingSummary. |
reviewsCount() | — | Všetky recenzie najvyššej úrovne bez ohľadu na stav. |
| — | for($x)->photoCount() | Fotografie v schválených recenziách najvyššej úrovne. |
| — | for($x)->reviewsWithPhotos() | Schválené recenzie najvyššej úrovne s aspoň jednou fotografiou. |
Súhrn hodnotení
ratingSummary() vráti DTO RatingSummary — všetko, čo stránka produktu potrebuje, v jednom objekte, s toArray() pre JSON odpovede:
$summary = $restaurant->ratingSummary();
$summary->average; // 4.6 (null when there are no rated reviews)
$summary->count; // 320
$summary->distribution; // [5 => 210, 4 => 80, 3 => 20, 2 => 6, 1 => 4]
$summary->photoCount; // 57
$summary->reviewsWithPhotos; // 41
return response()->json($summary->toArray());
// ['average' => 4.6, 'count' => 320, 'distribution' => [...],
// 'photo_count' => 57, 'reviews_with_photos' => 41]- average ignoruje recenzie len s textom; count ich zahŕňa.
- distribution má kľúče podľa hodnoty hodnotenia, od najvyššej, a obsahuje len hodnoty s aspoň jednou recenziou.
- photoCount a reviewsWithPhotos sú 0, keď sú fotografie vypnuté.
Cez fasádu
Rovnaké agregáty sú dostupné pre akýkoľvek model cez Reviews::for(), s traitom aj bez neho — metódy traitu ho volajú tiež:
use RoundlyConsulting\Reviews\Facades\Reviews;
$reviews = Reviews::for($restaurant);
$reviews->average(); // ?float, null when none
$reviews->count(); // int (approved)
$reviews->distribution(); // [5 => 120, 4 => 80, ...]
$reviews->photoCount(); // total photos on approved reviews
$reviews->reviewsWithPhotos(); // approved reviews that carry a photo
$reviews->summary(); // RatingSummary DTO — all of the aboveKaždé volanie spustí dopyt. Pri vyťažených výpisoch uložte počet a priemer priamo do tabuľky predmetu — pozrite Cachované agregáty.
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 kryptomienOdoslaní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.