В чем разница между ресурсом json и коллекцией ресурсов? в Laravel

Может кто-нибудь объяснить разницу между ResourceCollection и JsonResource?

В документах Laravel 6 вы можете сгенерировать 2 разных типа ресурсов... ResourceCollection и JsonResource. https://laravel.com/docs/6.x/eloquent-resources

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\ResourceCollection;

class ShopCollection extends ResourceCollection
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return parent::toArray($request);
    }
}

против...

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class Shop extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return parent::toArray($request);
    }
}

2 ответа

Решение

Когда вы конвертируете одну модель в json, это ресурс json, когда вы конвертируете коллекцию модели в json, то есть коллекцию ресурсов.

просто, если вы возвращаете коллекцию ресурсов или разбитый на страницы ответ, который является коллекцией.

См. Документацию

для создания ресурсов, преобразующих отдельные модели, вы можете создавать ресурсы, отвечающие за преобразование коллекций моделей. Это позволяет вашему ответу включать ссылки и другую метаинформацию, относящуюся ко всей коллекции данного ресурса.

Laravel Resource преобразует и отформатирует ваши данные перед отправкой клиенту. (Единственная запись)

Коллекция Laravel также делает то же самое, но она содержит несколько записей данных вместо одной записи, а также с коллекцией у нас есть доступ к таким функциям, какmap,filter, иpluckманипулировать данными

  • UserDetailsResource::make($user);(Единый ресурс)
  • new UserResource($user);(Единый ресурс)
  • => Если коллекция

Примечание. В последней версии PHP мы можем добавить возвращаемый тип в функцию exdestroy(): void; если вы используетеUserDetailsResource::collection($users);тип возвращаемого значения будет:AnonymousResourceCollection. еще:UserDetailsResource

Другие вопросы по тегам