Выбор ответа Junior Eloquent, N+1 и миграции спрашивают часто обновлено

orders() и orders

Вопрос

Чем $user->orders() отличается от $user->orders?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: orders() даёт построитель запроса, orders загруженную коллекцию. Метод связи возвращает объект HasMany, к которому можно добавить условия: $user-orders()-where("status", "paid")-get().

Варианты ответа

  1. Это одно и то же: свойство просто вызывает метод связи без скобок
  2. orders() даёт построитель запроса, orders загруженную коллекциюправильный ответ
  3. orders всегда делает новый запрос, а orders() берёт из кеша
  4. orders() возвращает обычный массив, а orders объект коллекции

Разбор

Метод связи возвращает объект HasMany, к которому можно добавить условия: $user->orders()->where("status", "paid")->get(). Свойство это «динамическое свойство»: при первом обращении связь загружается и кешируется в модели, повторные обращения не делают запросов. Если связь уже загружена через with, запроса нет вовсе.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.