Laravel 数据库查询生成器左联接与相关计数
Laravel DB query builder left join with related counts
我是 Laravel 的新人,遇到了数据库查询生成器的问题。
我想从用户 table 获取所有记录,并想计算愿望清单 table 中的相关愿望清单。这是我的查询。
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();
显示此错误。
Argument 2 passed to Illuminate\Database\Query\Builder::selectRaw()
must be of the type array, string given.
任何帮助将不胜感激。
提前致谢。
这应该有效。从 documentation 开始,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;
}
我是 Laravel 的新人,遇到了数据库查询生成器的问题。 我想从用户 table 获取所有记录,并想计算愿望清单 table 中的相关愿望清单。这是我的查询。
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();
显示此错误。
Argument 2 passed to Illuminate\Database\Query\Builder::selectRaw() must be of the type array, string given.
任何帮助将不胜感激。 提前致谢。
这应该有效。从 documentation 开始,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;
}