Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Хочу посчитать количество записей по условию следующим кодом:
public function scopeActive_cnt($query)
{
return $query->where('active',1)->count();
}
Если есть хотя бы одна запись, то возвращается число, но если записей нет, то возвращается объект билдера. Как правильно считать билдером?
Не хочется делать так:
Model::active()->count();
Так вроде считается сколько вернуло, а мне нужен запрос вида:
select count(*) as aggregate from `table`
Не в сети
Я бы перенес это на коллекции. Скорее всего записи уже выбраны:
// Если выбраны записи с active 1
$articles->count();
// Если выбраны все записи без where
$articles->where('active' 1)->count();
Не в сети
скоупы предназначены не для выборки данных а для настройки параметров построителя запросов. поэтому вариант
public function scopeActive($query) { $query->whereActive(true); }
Article::active()->count()
является правильным способом их использования. как минимум потому что позволяет сделать ещё и
Article::active()->latest()->forPage(1, 5)->get()
это как раз то для чего скоупы и нужны. если нужен специальный отдельный метод который отдаст только количество, его можно просто объявить как статический метод на модели или (если ожидается что модели будут сложными) вообще создать ArticleRepository. по использованию паттерна «репозиторий» в ларавеле статей понаписано достаточно
Не в сети