Добавить пользовательский элемент в коллекцию eloquent

#laravel #collections #eloquent

#laravel #Коллекции #eloquent

Вопрос:

Я использую Laravel 7.

У меня есть Category модель. Я отправил категории как API с ресурсами laravel. Но теперь я хочу добавить значение «все» в категории.

Контроллер:

 'categories' => CategoryResource::collection(Category::all()->push([
      'id' => 0,
      'name' => "All",
      'subcategories' => []
 ]))
  

Ресурс:

 public function toArray($request)
{
     return [
          'id' => $this->id,
          'name' => $this->name,
          'subcategories' => SubcategryResource::collection($this->subcategories)
     ];
}
  

Кроме того, я хотел добавить это пользовательское значение в начало коллекции.

Но я получаю эту ошибку:

Попытка получить свойство ‘id’ не-объекта

Пожалуйста, помогите мне. Как я могу решить свою проблему?

Ответ №1:

Попробуйте заменить $this->id на $this['id']

Если это работает, ваш запрос возвращает массив, а не объект.

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

1. Это не решение. Есть ли другое лучшее решение?

Ответ №2:

Проблема здесь в том, что вы пытаетесь добавить элемент в коллекцию, которая не является моделью категории. $this в ресурсе возвращается к заданной модели. Однако вы передаете массив, поэтому модели нет.

Так что попробуйте это вместо

 $allCategory = new Category(['id' => 0, 'name' => 'All']);

'categories' => CategoryResource::collection(Category::all()->prepend($allCategory));
  

Я получил это от:https://laracasts.com/discuss/channels/eloquent/add-a-custom-value-to-eloquent-collection