Потратив некоторое время на поиск ответов в гугле, я так и не нашел ответа на следующий вопрос.
Есть ли аналог scope для коллекций Laravel?
Среди ответов, которые я прочел, было указано, что можно использовать и scope для моделей (не коллекций). К примеру: мне надо получить все активные (со статусом 1) и неактивные (статус 0) коментарии. Как это делается, варианты:
- $post->comments - получаю все комментарии (relation создан в модели)
- $post->activeComments() - все активные комментарии (scope создан заранее)
$post->inActiveComments() - все неактивные комментарии (scope создан заранее)
При использовании варианта 1, в коде я могу получить оба типа комментариев:
$active_comments = $post->comments->where('status', 1);
$incative_comments = $post->comments->where('status', 0)
В чем, собственно,
вопрос: при использовании варианта 1 на странице выполняется
всего 1 SQL-запрос к БД. При использовании вариантов
2 и 3 -
2 SQL-запроса. Поэтому и стоит вопрос: "Можно ли как-то
сократить запись из кода выше использую что-то типа
scope только для коллекций?".
P.S.: как вы считаете, стоит ли использовать вариант со scope для запросов или мой вариант, изложенный выше?