#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