如何用Laravel查询构造器实现指定MySQL内连接查询?
用Laravel查询构造器实现指定MySQL查询的方案
嘿,我来帮你把这条原生MySQL查询转换成Laravel查询构造器的写法,完全贴合Laravel的语法风格:
首先先回顾下你的原生查询逻辑:从routes表出发,通过三次内连接分别关联locations表(分别取别名src和dest)、groups表,最终选择指定字段并按routes.id排序。
对应的Laravel查询构造器代码如下:
use Illuminate\Support\Facades\DB; $routesData = DB::table('routes') // 指定要查询的字段,注意区分不同表的同名字段 ->select( 'routes.id', 'src.title', 'dest.title', 'groups.title' ) // 第一次内连接locations表,别名为src ->join('locations as src', 'src.id', '=', 'routes.src') // 第二次内连接locations表,别名为dest ->join('locations as dest', 'dest.id', '=', 'routes.dest') // 内连接groups表 ->join('groups', 'groups.id', '=', 'routes.groups') // 按routes.id排序 ->orderBy('routes.id') // 获取查询结果 ->get();
额外小提示
因为三个title字段来自不同表,直接查询的话结果里会出现重复的键名(最终只会保留最后一个title的值),建议给这些字段起别名来区分,修改select部分即可:
->select( 'routes.id', 'src.title as source_title', // 来源地标题 'dest.title as destination_title', // 目的地标题 'groups.title as group_title' // 分组标题 )
这样获取到的结果数组里每个标题都有清晰的键名,后续处理会更方便。
内容的提问来源于stack exchange,提问作者Raja Durai C
相关产品推荐
相关产品推荐

