@dmalapsh

Как управлять автоматической загрузкой модели в методе контроллера laravel?

С помощью artisan команды создал контроллер привязанный к модели Announcement. Там же нашел весьма интересный код следующего вида.
public function show(Announcement $announcement)
    {
    	/****/
    }

Т.е., laravel сам инжектит уже готовую модель, зная по url с каким id нужно запрашивать из БД.
И все бы хорошо, но я не нашел об этом информации в документации. Думал, что найду ответ в разделе про сервис контейнеры, однако поиски не увенчались успехом. Суть в том, что мне нужно подгружать отношение при загрузке модели таким методом, а вот куда с этим сунуться не знаю. Можно конечно использовать load вместо with, но хотелось бы за один запрос к БД это организовать, да лишний код не прописывать в методе.
  • Вопрос задан
  • 93 просмотра
Решения вопроса 3
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
В контексте одной модели, а не коллекции, load работает точно так же, как и with — делает второй запрос к таблице отношения.
Так что вы даже можете load не вызывать, а просто использовать отношение — Eloquent всё автоматически загрузит. Load здесь нужен только если вам нужно управлять загрузкой отношения: указать дополнительное условие или дополнительные связи.
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега Laravel
frontend developer
И все бы хорошо, но я не нашел об этом информации в документации.

Это называется привязка модели к маршруту. Явная и неявная. Описано здесь:
https://laravel.com/docs/8.x/routing#route-model-b...
Изучайте.
Ответ написан
Комментировать
@inFureal
Можно использовать $with поле в модели. Это массив названий отношений
protected $with = ['country'];
В данном случае будут подтягиваться отношения при КАЖДОМ получении модели из базы. Т.е. дополнительный запрос. Если нужно сделать разово, то лучше всего load
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы