如何将MySQL原生查询转换为Laravel 5.5查询构造器
没问题,我帮你把这段原生MySQL查询转换成Laravel 5.5的查询构造器写法,完全适配框架的语法规范,代码如下:
$results = DB::table(function ($query) { $query->select( 'translate_groups.id', 'translate_groups.name', 'translate_groups.description', 'languages.name as languageName' ) ->from('translate_groups') ->leftJoin('language_translate_group', 'language_translate_group.translate_group_id', '=', 'translate_groups.id') ->leftJoin('languages', 'language_translate_group.language_id', '=', 'languages.id'); }, 'group_table') ->select( 'group_table.id', 'group_table.name', 'group_table.description', DB::raw("GROUP_CONCAT(group_table.languageName SEPARATOR ', ') as languages") ) ->groupBy('group_table.id', 'group_table.name', 'group_table.description') ->get();
关键部分说明:
- 子查询通过闭包定义,并指定别名
group_table,和原生SQL的子查询结构完全对应; - 因为Laravel查询构造器没有直接封装MySQL的
GROUP_CONCAT函数,所以用DB::raw()来直接调用这个原生聚合函数; groupBy()方法传入的字段和原生SQL的分组字段保持一致,确保分组逻辑准确;- 最后用
get()获取完整结果集,如果需要分页,可替换为paginate($perPage)方法。
内容的提问来源于stack exchange,提问作者Thoan Pham
相关产品推荐
相关产品推荐

