Laravel: запрос с Eloquent с использованием count
я хочу сделать запрос, который включает count, и он работает. Запрос выглядит следующим образом:
$user = Auth::user();
$id = $user->id;
$users = DB::table('cuentas as a')
->join('pasajeros as b', 'b.id', '=', 'a.pasajero_id')
->where('b.usuarios_id', $id)
->select(DB::raw('count(*) as user_count'))
->get();
return $users;
return $users приносит мне это:
[{"user_count":0}]
и все в порядке, у меня есть 0, потому что до сих пор нет записи, где содержится идентификатор пользователя. Но мне нужно сделать так, чтобы содержимое $users было только числом, в этом случае 0. Чтобы вы могли использовать его в if, в противном случае этот $ users не является числом как Таль.
2 answers
Результатом является объект в массиве, который доставляет в результате метод get() Eloquent, по этой причине он должен быть легко доступен следующим образом
echo $users[0]->user_count;
Таким образом, вы вызываете первый элемент массива (который является объектом users), а затем вызываете его свойство user_count.
Вы также можете использовать метод first()
, чтобы получить первый объект напрямую и не нуждаться в вызове первого элемента массива:
$users = DB::table('cuentas as a')
->join('pasajeros as b', 'b.id', '=', 'a.pasajero_id')
->where('b.usuarios_id', $id)
->select(DB::raw('count(*) as user_count'))
->first();
echo $users->user_count;
В laravel 5.2 вы можете использовать функцию withCount
, которой вы передаете отношение в качестве параметра.
$users = DB::table('cuentas as a')
->join('pasajeros as b', 'b.id', '=', 'a.pasajero_id')
->where('b.usuarios_id', $id)
->withCount('nombre_de_tu_relacion')
->first();
Затем вы вызываете его как $users - >имя_изображения_count.
Чтобы лучше отобразить его: предположим, что вы хотите подсчитать пользователей, как у вас есть в вашем примере, вы должны использовать только withCount('users')
(или как называется Ваше отношение), а затем назвать его $users->users_count
. Довольно простой и понятный.
Или в случае, если вы хотите продолжать использовать код, который у вас есть, вы можете "очистить его" немного больше, используя selectRaw
.
$users = DB::table('cuentas as a')
->join('pasajeros as b', 'b.id', '=', 'a.pasajero_id')
->where('b.usuarios_id', $id)
->selectRaw('count(*) as user_count')
->first();
Приветствия.