Возвращает разные данные для 2 разных маршрутов из одной и той же модели с использованием ресурса API

#laravel

#laravel

Вопрос:

У меня есть 2 маршрута, которые используют show() amp; index() метод в контроллере. Имя модели — Feed и имеет 4 отношения FeedType, FeedImage, FeedVideo и FeedCaption.

Я возвращаю все поля и конкретные поля отношений, кроме поля «эскиз«, через ресурс Feed, когда API нажимает show () метод

 class Feed extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'content' => $this->content,
            'keywords' => $this->keywords,
            'slug' => $this->slug,
            'type' => new FeedTypeResource($this->feedType),
            'images' => FeedImageResource::collection($this->feedImages),
            'video' =>  new FeedVideoLinkResource($this->feedVideoLink),
            'caption' => new FeedCaptionResource($this->feedCaption),
        ];
    }
}

 

Теперь я хочу вернуть только 3 поля ‘title’, ‘thumbnail’, ‘created_at‘ с одним полем связи ‘name‘ из отношения FeedType через ресурс, когда API нажимает show() метод. Итак, я создал ресурс FeedCollection. Но это выдает ошибку.

 class FeedCollection extends ResourceCollection
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'title' => $this->title,
            'thumbnail' => $this->thumbnail,
        ];
    }
}
 

Комментарии:

1. какая ошибка, это информация, которую важно знать… также вы, вероятно, имеете дело с одним объектом, а не с коллекцией

Ответ №1:

Вы можете использовать метод chunk для сбора.Метод chunk разбивает коллекцию на несколько меньших коллекций заданного размера:

 $collection = collect([1, 2, 3, 4, 5, 6, 7]);

$chunks = $collection->chunk(4);

$chunks->all();

// [[1, 2, 3, 4], [5, 6, 7]]
 

Этот метод особенно полезен в представлениях при работе с грид-системой, такой как Bootstrap. Например, представьте, что у вас есть коллекция моделей Eloquent, которые вы хотите отобразить в таблице:

 @foreach ($products->chunk(3) as $chunk)
    <div class="row">
        @foreach ($chunk as $product)
            <div class="col-xs-4">{{ $product->name }}</div>
        @endforeach
    </div>
@endforeach
 

пожалуйста, смотрите Примеры по ссылке:
https://laravel.com/docs/8.x/collections#method-chunk