Быстрее ли запрашивать все в контроллере и возвращать каждый запрос назад или запрашивать его во время его использования?
Предполагая, что все модели имеют отношение
Пример:
Сделайте все в котроллере, а затем верните
Public function articlesHome($id) { $art = Articles::find($id); $cit = Articles::city(); $tag = Articles::tags(); Return view('articles', compact('art', 'tag', 'cit'); }
Или в поле зрения (после того, как контроллер вернул $ article)
{{ $article->name }} ... {{ $article->city->name }} ... @foreach($article->tags as tag) {{ tag->name }} @endforeach
Что лучше на практике и быстрее.
Производительность – это всего лишь вопрос поиска способа получить меньше запросов к базе данных для достижения того же результата.
Хороший подход позволил бы laravel сделать это за вас в одной команде:
Public function articlesHome($id) { $article = Articles::whereId($id)->with('city','tags')->get(); Return view('articles', compact('article'); }
Ваше мнение будет таким же. Соотношения статей уже построены, поэтому никаких дополнительных запросов не будет.
{{ $article->name }} ... {{ $article->city->name }} ... @foreach($article->tags as tag) {{ tag->name }} @endforeach
Хорошим примером для чтения является MVC, который обозначает Модели, Представления и Контроллеры.
Это шаблон проектирования, в котором основное внимание уделяется разделению проблем, где вы разделяете различные проблемы ваших приложений на разные разделы. Поиск данных – это модель (обычно база данных, но не обязательно), вид (шаблоны Blade) и контроллер.
Вы можете выйти за рамки простого MVC и разделить все дальше, включив в него репозитории, события и команды для лучшего разделения.
Причина, по которой вы, возможно, захотите использовать репозитории (которые являются только обертками вокруг вашей модели), – это абстрагирование фактического поиска и сохранения ваших данных с вашего контроллера, что позволяет вам отказаться от использования базы данных в другой форме, не требуя обновления кода в ваших контроллерах.
Я предполагаю, что быстрее это сделать в представлении, пока вы сэкономите время, отправив его в представление. Я рекомендую вам установить laurvel debugbar для просмотра деталей.