gpt4 book ai didi

mysql - Laravel DB 查询构建器左连接相关计数

转载 作者:行者123 更新时间:2023-11-29 07:25:20 25 4
gpt4 key购买 nike

我是 Laravel 的新手,面临数据库查询构建器的问题。我想从用户表中获取所有记录,并想计算愿望 list 表中的相关愿望 list 。这是我的查询。

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() 的第二个参数是一个可选的绑定(bind)数组。

但是,您可以结合使用 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;
}

关于mysql - Laravel DB 查询构建器左连接相关计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54161500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com