Laravel Eloquent: количество ($ результат) против $ результат-> количество () - PullRequest
0 голосов
/ 18 октября 2018

Я немного новичок в этом, и первоначально пытался проверить, возвращает ли моя модель результаты с isEmpty(), но подумал, что вместо этого попробую count(), тогда я наткнулся на следующее:

У меня есть следующий код, который возвращает данные из моей модели:

$results = Game::where('code', '=', $code)->with('genre', 'creator')

И использую ли я first() или get() в сочетании с count(result) или$results->count() Я получаю разные значения, и я не уверен, почему.

при использовании ->first()

dd($results->count()) = 11930 // Number of rows in the db

при использовании ->get()

dd($results->count()) = 1 // What I'd expect the query to return

при использовании ->first()

dd(count($results)) = "count(): Parameter must be an array or an object that implements Countable"

при использовании ->get()

dd(count($results)) = 1

Я не понимаю 1) почему при первом использовании счетчик такой же, как у каждой строки вдб.2) Почему count() нельзя использовать с first().

Может ли кто-нибудь пролить свет на то, почему я не могу использовать счет в первую очередь, как мне хотелось бы?

Обновление:

Я также не могу использовать ->isEmpty() с ->first(), но могу с ->get() ...?

Когда япопробуйте сначала использовать, я получаю Illuminate\Database\Query\Builder::isEmpty does not exist.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Прежде всего,

get() возвращает коллекцию объектов, в то время как first() возвращает модальный объект запроса.

$results = Game::where('code', '=', $code)->with('genre', 'creator')

dd($results->count()) = 11930 // Number of rows in the db

при использовании ->get()

$results = Game::where('code', '=', $code)->with('genre', 'creator')->get()
dd($results->count()) = 1

потому что у него есть коллекция, которая содержит номера объектов данных базы данных.->count получает только одну коллекцию и возвращает 1.

0 голосов
/ 18 октября 2018

Отказ от ответственности: я не уверен, почему количество вашей базы данных и количество результатов не совпадают, однако я могу пролить свет на различные типы подсчета.

Game::where('code', '=', $code)->count();

Это называетсяна экземпляре построителя запросов.Он запускается по запросу к базе данных, без выбора всех строк.Проверьте название Агрегаты здесь: https://laravel.com/docs/5.7/queries

Game::where('code', '=', $code)->get()->count();

Как только вы используете get(), laravel выбирает строки, загружает их все как модели и создает коллекцию.Этот счетчик находится в коллекции (немного похоже на массив), поэтому просто получает возвращаемое число (т. Е. Если они разбиты на страницы или что-то в этом роде, он просто получит эту сумму).Проверьте Количество здесь .

Game::where('code', '=', $code)->first()->count();

Это выполняется на первой возвращенной модели ... если вы ее не написали, победила модель laravel по умолчаниюУ него нет count() метода.

count($results)

Наконец, count(), если не метод класса, это просто функция php по умолчанию, которая возвращает длину массива или другого объекта ( документация ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...