在查询生成器中连接多个表非常简单:
DB::table('projects')
->select('tasks.*')
->join('tasks', 'tasks.project_id', 'projects.id')
但现在客户要求我避免join
使用:
SELECT tasks.*
FROM projects, tasks
WHERE tasks.project_id = projects.id
如何做?
使用 Builder 的方法from
是个坏主意:
from
仅接受一个字符串(一个表名),而不是数组from
杀死table
并from
写过
PS 请不要浪费时间描述 Eloquent 的工作原理 - 我只需要知道如何使用 Laravel Query Builder 来实现。当然,如果可以使用 LQB 来实现的话
您可以尝试使用雄辩的模型而不是数据库查询生成器进行预先加载。
在本例中,我们将创建 2 个模型。以下命令将创建模型文件。
我假设您已经有了迁移文件,因此我们跳过迁移。
在下一步中,您需要定义模型中的关系。
应用程序\模型\项目.php
应用程序\模型\任务.php
最后,在您的控制器中,您可以使用项目信息检索任务:
虽然我会说使用 Join 语法,因为它更清楚你在做什么,并且任何性能差异都可以忽略不计,如果你真的想构建你的查询,你可以传递给任何查询方法,一个“原始”实例让它按原样构建你的查询
结果:
select `tasks`.* from projects, tasks where `tasks`.`project_id` = `projects`.`id`