mysql - 原始 SQL 到 laravel 查询构建器
问题描述
您如何将此原始 sql 构建器转换为 laravel DB Builder
SELECT *
FROM `applications`
WHERE EXISTS (SELECT *
FROM `applicants`
INNER JOIN `applicant_application`
ON `applicants`.`id` =
`applicant_application`.`applicant_id`
WHERE `applications`.`id` =
`applicant_application`.`application_id`
AND `user_id` = 18)
ORDER BY `created_at` DESC
LIMIT 20
这是我尝试过但似乎不起作用的方法
DB::table('applications as apt')
->whereExists( function ($q) {
$q->from('applicants as app')
->join('applicant_application as aa', 'app.id', '=', 'aa.applicant_id')
->where('apt.id', '=', 'aa.application_id')
->where('app.user_id', '=', 18);
})->orderBy('created_at', 'DESC')->paginate(10);
将不胜感激任何帮助
解决方案
因为apt.id
andaa.application_id
是 diff 表中的两列,您正在使用与字符串where
进行比较。apt.id
'aa.application_id'
您需要用于whereColumn
比较两个不同的列:
->whereColumn('apt.id', '=', 'aa.application_id')
推荐阅读
- amazon-ec2 - 元数据库:在 ElasticBeanstalk 上丢失了一切
- python - 对df的所有负值求和
- javascript - 将数据存储在数组数组的变量中,以便在 Reactjs 中创建平面数组
- matlab - 运行代码计算 ODE 的欧拉方法
- node.js - 使用 Greenlock-Express 的通配符域的 SNI 错误
- javascript - 使用jQuery单击按钮时无法显示输入中的文本
- intellij-idea - 如何在 IntelliJ 中设置多行注释的格式
- node.js - 当您点击 URL 时,nodejs 中的请求和响应
- javascript - Neataptic XOR 仅使用 3 个节点求解
- vue.js - Vue + Axios Post 请求响应数据返回 undefined