---
title: "JSON resource — Reviews for Laravel | Roundly"
description: "ReviewResource a ReviewCollection poskytujú rozumný tvar verejného API — vymeňte resources autora a predmetu alebo ich publikujte a upravte polia."
url: https://roundly-consulting.com/sk/open-source/navody/reviews-for-laravel/json-vystup
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)

# JSON resource

ReviewResource (a ReviewCollection) poskytujú rozumný verejný tvar pre API a mobilných klientov:

```php
use RoundlyConsulting\Reviews\Http\Resources\ReviewResource;

return ReviewResource::collection(
    $product->approvedReviews()->with(['author', 'reviewable', 'responses'])->get(),
);
```

| Pole | Hodnota |
| --- | --- |
| `id / parent_id` | Kľúč recenzie; kľúč rodiča pri odpovediach vlastníka. |
| `rating / status / verified` | Hodnotenie (alebo null), stav ako reťazec, príznak overenia. |
| `title / content` | Text recenzie. |
| `helpful_count / unhelpful_count / helpful_score` | Počty hlasov a ich rozdiel. |
| `author / reviewable` | Každé ako { id, type } — type je krátky názov triedy modelu (User), nikdy celý názov triedy; null, keď súvisiaci riadok už neexistuje. |
| `responses` | Vnorené položky ReviewResource — len ak je vzťah načítaný. |
| `photos` | Zoznam { id, url, srcset }, pri súkromných fotografiách podpísaný. |
| `created_at / updated_at / approved_at` | Reťazce vo formáte ISO 8601. |

meta sa zámerne nezverejňuje, interné poznámky a dôvody zamietnutia teda ostanú súkromné. URL fotografií sa riadia ich viditeľnosťou — pri súkromných sú podpísané, nikdy verejné.

## Autor a predmet

author ani reviewable nikdy neobsahujú názov PHP triedy. Každé sa vykreslí cez vlastný resource, ktorý obalí súvisiaci model — ReviewAuthorResource a ReviewableResource, predvolene oba {id, type}. type je krátky názov triedy modelu (User, Product), s morph mapou aj bez nej — nikdy nie morph alias ani celý názov triedy (App\\Models\\User):

```json
{
  "id": 12,
  "rating": 5,
  "author": { "id": 7, "type": "User" },
  "reviewable": { "id": 42, "type": "Product" },
  …
}
```

Ak súvisiaci riadok už neexistuje, vykreslí sa null; oba kľúče sú vždy prítomné. Ak vaše API potrebuje viac (meno, avatar, nadpis), nasmerujte reviews.resources.author alebo reviews.resources.reviewable na vlastný JsonResource. Dostane súvisiaci model:

```php
// app/Http/Resources/ReviewerResource.php
final class ReviewerResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->resource->getKey(),
            'name' => $this->resource->name,
            'avatar' => $this->resource->avatar_url,
        ];
    }
}

// config/reviews.php
'resources' => [
    'author' => App\Http\Resources\ReviewerResource::class,
    'reviewable' => RoundlyConsulting\Reviews\Http\Resources\ReviewableResource::class,
],
```

Prázdna hodnota použije resource balíka; čokoľvek, čo nie je konkrétnou podtriedou JsonResource, vyhodí InvalidConfigurationException s názvom kľúča. ReviewResource::authorOf($review, $request) a ReviewResource::reviewableOf($review, $request) vrátia tie isté vykreslené odkazy ako obyčajné polia (alebo null).

## Stránkované kolekcie

```php
use RoundlyConsulting\Reviews\Http\Resources\ReviewCollection;

return new ReviewCollection(
    $product->approvedReviews()->latestFirst()->paginate(10),
);
```

ReviewCollection pred vykreslením načíta autorov a predmety svojich recenzií — aj už načítaných odpovedí vlastníka — jedným dopytom na každý morph typ; samotné odpovede nikdy nenačítava. Keď recenzie vykresľujete inak (new ReviewResource($review), ReviewResource::collection()), načítajte author a reviewable vopred ako v príklade vyššie, inak pribudne dopyt na každú recenziu.

## Úpravy

Publikujte upraviteľné kópie — App\\Http\\Resources\\Reviews\\ReviewResource a ReviewCollection v app/Http/Resources/Reviews, triedy vo vašom namespace, ktoré vlastníte a ktoré na začiatku vykresľujú presne to isté ako resource balíka:

```bash
# Translations → lang/vendor/reviews
php artisan vendor:publish --tag="reviews-translations"

# JSON resources → app/Http/Resources/Reviews
php artisan vendor:publish --tag="reviews-resources"
```

Upravte ich a v controlleroch používajte ich namiesto tried balíka:

```php
use App\Http\Resources\Reviews\ReviewResource;

return ReviewResource::collection(
    $product->approvedReviews()->with(['author', 'reviewable', 'responses'])->get(),
);
```

Publikovaný ReviewResource vykresľuje author a reviewable cez pomocné metódy balíka, takže náhrady cez reviews.resources.\* platia aj pre vašu kópiu:

```php
// app/Http/Resources/Reviews/ReviewResource.php
use RoundlyConsulting\Reviews\Http\Resources\ReviewResource as PackageReviewResource;

'author' => PackageReviewResource::authorOf($review, $request),
'reviewable' => PackageReviewResource::reviewableOf($review, $request),
```

Kópie publikované pred verziou 1.2.0 stále vykresľujú uložené author\_type a reviewable\_type — v aplikácii bez morph mapy celý názov triedy. Publikujte resources znova (--force prepíše vaše úpravy) alebo tieto dva kľúče vo svojej kópii nahraďte riadkami vyššie.

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