php - Laravel 查询构建器中留下的 SQL 连接

标签 php mysql laravel eloquent

我尝试在 Laravel 查询生成器中执行此查询,但结果不一样。

select u.id as id,
u.name as name,
count(c.user_id) as casos,
cast(SUM(CASE WHEN c.status = 2 THEN 1 ELSE 0 END) AS SIGNED INTEGER) AS pendientes,
cast(SUM(CASE WHEN c.status = 0 THEN 1 ELSE 0 END) AS SIGNED INTEGER) AS enviados
from users u
left join casos c
on c.user_id = u.id
where u.lab_id = 2
and u.admin = 0
group by u.id

这是我的 Laravel 查询:

User::select(
            'users.id as id',
            'users.name as name',
            DB::raw("count(casos.user_id) as casos"),
            DB::raw("cast(SUM(CASE WHEN casos.status = 2 THEN 1 ELSE 0 END) AS SIGNED INTEGER) AS pendientes"),
            DB::raw("cast(SUM(CASE WHEN casos.status = 0 THEN 1 ELSE 0 END) AS SIGNED INTEGER) AS enviados"),
            'users.created_at as created_at'
        )
        ->leftJoin('casos', 'casos.user_id', '=', 'users.id')
        ->where('lab_id', 2)
        ->groupBy('user_id');

原始查询返回所有用户,即使没有 casos,laravel 仅返回有 casos 的用户。我在 laravel 查询中做错了什么?

最佳答案

将最后一行更改为:

->leftJoin('casos', 'casos.user_id', '=', 'users.id')
->where('users.lab_id', 2)
->where('users.admin', 0)
->groupBy('users.id');

缺少条件u.admin = 0。并且您按 casos.user_id 而不是 users.id 进行分组。您不应该按 LEFT JOIN 的右表进行分组。

关于php - Laravel 查询构建器中留下的 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49335240/

相关文章:

php - 如何组合数组行并使其可变

php - 谷歌地图 - 用户精确定位

php - 从 PHP 运行 bash 脚本停止

php - 在 SELECT 里面

php - Laravel - Artisan 给出了错误的基本 URL

php - 我如何从给定的日期时间结构创建碳对象?

PHP:如何在主命名空间中导入子命名空间?

sql - 将 CSV 导入 MySQL 而不会丢失自动增加字段的数据

MySQL SELECT 车辆配件选择和过滤

mysql - 如何创建动态 SQL 查询