如何在Laravel Query Builder中避免使用join实现多表关联查询?
Laravel Query Builder 无JOIN实现多表关联查询
要实现等价于以下SQL的查询(避免使用JOIN方法):
SELECT tasks.* FROM projects, tasks WHERE tasks.project_id = projects.id
有两种可行的Query Builder实现方案:
方案一:使用DB::raw指定多表
直接通过DB::raw()在from()方法中传入多个表名,完全匹配目标SQL结构:
DB::table(DB::raw('projects, tasks')) ->select('tasks.*') ->where('tasks.project_id', '=', 'projects.id');
方案二:使用crossJoin方法
利用crossJoin()生成笛卡尔积查询,再通过where()添加关联条件,最终执行效果与目标SQL一致:
DB::table('projects') ->crossJoin('tasks') ->select('tasks.*') ->where('tasks.project_id', '=', 'projects.id');
两种方案均未使用JOIN方法,且能正确生成符合需求的查询逻辑。
内容的提问来源于stack exchange,提问作者vbulash
相关产品推荐
相关产品推荐

