У меня есть следующие два метода для подсчета количества учетных записей, которые имеют активный статус. Я хочу знать, является ли count()
Метод для модели выбирает строки из базы данных и подсчитывает количество возвращаемых объектов или просто выбирает количество строк, применяя функцию SQL count (). А также, если следующие два метода похожи или нет?
Account::select(DB::raw('count(*) as count'))->where('status','active')->get()->count
Account::where('status','active')->count()
Если вы используете его в построителе запросов, он выполнит 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']);
Других решений пока нет …