繁体   English   中英

将SQL更改为Laravel中的查询生成器

[英]Change SQL into Query Builder in Laravel

这是我的SQL语句

SELECT `pams_users`.display_name,`pams_user_levels`.description FROM pams_users 
JOIN pams_developer ON `pams_users`.developer_id=`pams_developer`.id AND `pams_developer`.id=27 OR `pams_users`.`parent_dev`=27
JOIN pams_user_levels ON `pams_user_levels`.id=`pams_users`.user_level AND `pams_user_levels`.id=6
GROUP BY  `pams_users`.display_name   

这是我基于SQL的查询构建器

 DB::table('pams_users')
        ->join('pams_developer','pams_developer.id','pams_users.developer_id')
        ->join('pams_user_levels','pams_user_levels.id','pams_users.user_level')
        ->where('pams_developer.id',27)
        ->orWhere('pams_users.parent_dev',27)
        ->where('pams_user_levels.id',6)
        ->select('developer_name','description','display_name')
        ->selectRaw('count(pams_users.id) as count')
        ->groupBy('display_name')
        ->get();

但是,查询生成器未显示任何错误,但与SQL语句显示了不同的结果。
任何人都可以找出我的查询生成器问题吗?
感谢您对我的查询生成器的任何建议和评论。


问题可能是在那里的Eloquent查询构建器没有封装OR WHERE子句。 您可以将闭包传递到where()中,以执行此操作,如下所示。

我还使用DB::raw而不是selectRaw()方法将选择分组到单个方法调用中。

DB::table('pams_users')
    ->join('pams_developer','pams_developer.id','pams_users.developer_id')
    ->join('pams_user_levels','pams_user_levels.id','pams_users.user_level')
    ->select([
        'developer_name',
        'description',
        'display_name',
        DB::raw('count(pams_users.id) as count'), // this avoids the separate selectRaw()
    ])
    ->where(function($query) {
        $query->where('pams_developer.id',27)
            ->orWhere('pams_users.parent_dev',27);
    })
    ->where('pams_user_levels.id',6)
    ->groupBy('display_name')
    ->get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM