Предположим, у меня есть модель Post
, которая hasMany
Comment
модель. Поэтому, чтобы получить комментарии, я бы сделал $post->comments
.Яркая модель с вызовом внутри контроллера
На некоторых веб-сайтах, я видел, что люди делают это в контроллере:
$post = App\Post::with('comments')->findOrFail($id);
return view('someview', compact('post'));
, а затем внутри вида:
@foreach($post->comments as $comment)
...
В моем понимании, $post->comments
будет всегда есть комментарии, и нет необходимости звонить with('comments')
. Это неправильно?
Если да, то в чем разница между выше и ниже:
Контроллер
$post = App\Post::findOrFail($id);
return view('someview', compact('post'));
Посмотреть
@foreach($post->comments as $comment)
....
С жадным загрузки вы получите более быстрое время отклика, и меньше нагрузки на сервер, а с другой стороны, второй подход вы бы иметь то, что называется N + 1 вопрос, где для каждой строки, вы должны запустить новый запрос посмотрите здесь: http://stackoverflow.com/questions/97197/what-is-the-n1-selects-issue – ahmad