Возвращает ли метод count () количество элементов в eloquent коллекции или подсчитывает количество строк непосредственно из SQL-запроса

У меня есть следующие два метода для подсчета количества учетных записей, которые имеют активный статус. Я хочу знать, является ли count() Метод для модели выбирает строки из базы данных и подсчитывает количество возвращаемых объектов или просто выбирает количество строк, применяя функцию SQL count (). А также, если следующие два метода похожи или нет?

Account::select(DB::raw('count(*) as count'))->where('status','active')->get()->count

Account::where('status','active')->count()

0

Решение

Если вы используете его в построителе запросов, он выполнит SQL-запрос, но если вы используете его в коллекции Laravel, он выполнит ее в коллекции.

Из ваших примеров, это будет запрос:

Account::where('status','active')->count();
// SQL performed: SELECT count(*) FROM accounts WHERE status = active;

Но это, например, сначала извлечет результаты (которые возвращают коллекцию), а затем подсчитает элементы в коллекции:

Account::where('status','active')->get()->count();
// SQL performed: SELECT * FROM accounts WHERE status = active;

Может быть, более интуитивно

$accounts = Account::where('status', 'active')->get();
// $accounts is now a collection of accounts SQL to get them was:
// select * from accounts where status = active;

// Then you can do this and it will be the same as performing count($accounts)
$count = $accounts->count();
// Same as doing this (except the items in the collection are different)
$count = collect(['some', 'elements', 'in the', 'collection']);
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector