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 не является числом как Таль.

Author: Shaz, 2016-07-09

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;
 2
Author: Shaz, 2016-07-10 01:12:50

В 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();

Приветствия.

 1
Author: Cristian Meza, 2016-07-27 10:49:56