Почему Query Builder в Laravel 5.2 возвращает объект?

Хочу посчитать количество записей по условию следующим кодом:

public function scopeActive_cnt($query)
{
    return $query->where('active',1)->count();
}

Если есть хотя бы одна запись, то возвращается число, но если записей нет, то возвращается объект билдера. Как правильно считать билдером?

Не хочется делать так:

Model::active()->count();

Так вроде считается сколько вернуло, а мне нужен запрос вида:

select count(*) as aggregate from `table`
  • Вопрос задан
  • 252 просмотра
Решения вопроса 1
v_decadence
@v_decadence
Потому что scope не предназначены для того, чтобы в них вызывался метод выборки (get, paginate, count и т.д.). Там только можно накладывать ограничения. Логика Laravel ожидает, что из scope будет возвращен Builder.

Model::active()->count(); можно поместить в отдельный метод, чтобы не писать каждый раз, если для Вас это длинно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы