Конструктор запросов Laravel DB оставил соединение со связанным количеством - PullRequest
0 голосов
/ 12 января 2019

Я новичок в Laravel и столкнулся с проблемой в построителе запросов к БД. Я хочу получить все записи из таблицы пользователей и хочу посчитать связанные списки желаний в таблице желаний. Вот мой запрос.

select `users`.*, count(wishlists.id) as wishlists_count from `users` left join `wishlists` on `users`.`id` = `wishlists`.`uid` where `users`.`status` = 1 group by `wishlists`.`id`

Я хочу сделать это с помощью построителя запросов laravel. Вот что я пытаюсь.

 $leads = DB::table('users')
            ->selectRaw('users.*', 'count(wishlists.id) as wishlists_count')
            ->leftJoin('wishlists', 'users.id', '=', 'wishlists.uid')
            ->where('users.status',1)
            ->groupBy('wishlists.id')
            ->get();

Это показывает эту ошибку.

Аргумент 2 передан в Illuminate \ Database \ Query \ Builder :: selectRaw () должен иметь тип массива, заданная строка.

Любая помощь будет принята с благодарностью. Заранее спасибо.

1 Ответ

0 голосов
/ 12 января 2019

Это должно работать. Из документации второй аргумент selectRaw() является необязательным массивом привязок.

Тем не менее, вы можете достичь того, что вы ищете, с комбинацией select() и DB::raw()

$leads = DB::table('users')
   ->select('users.*', DB::raw('count(wishlists.id) as wishlists_count'))
   ->leftJoin('wishlists', 'users.id', '=', 'wishlists.uid')
   ->where('users.status',1)
   ->groupBy('wishlists.uid')
   ->get();

Редактировать: вышеуказанный ответ неверен. Я бы рассмотрел следующие альтернативы.

Либо вы можете достичь этого с помощью подзапроса с чем-то вроде следующего:

$wishlist = Wishlist::select(DB::raw('count(wishlists.id)'))
    ->whereColumn('uid', 'users.id')
    ->getQuery();

$users = User::select('users.*')
    ->selectSub($wishlist, 'wishlists_count')
    ->get(); 

Или гораздо более простым способом (при условии, что у вас настроены отношения wishlists)

Users::withCount('wishlists')->get();

foreach($users as $user) {
    echo $user->wishlists_count; 
}
...