php - 如何在 Laravel 中的两个表的 where 中验证两列的相等性
问题描述
我有两个具有以下结构的表
Table 1 Table2
table_id|table_name table_id2| table_name2
1 | sale 2 | sale
2 | sale 1 | note
1 | note
3 | sale
2 | note
我想从 table_id 和 table_name 不在 table2 (id, table) 中的第一个表中获取所有记录
预期结果
1 | sale
3 | sale
2 | note
像这样的事情发生在我身上,但我没有得到预期的结果
$table1->where(function ($query) {
$query->whereNotIn('table_id',$table2->pluck('table_id2'));
});
解决方案
假设你的桌子是这样的;
CREATE TABLE `first`
(
`table_id` int(11),
`table_name` varchar(64)
);
CREATE TABLE `second`
(
`table_id2` int(11),
`table_name2` varchar(64)
);
查询将是;
select first.*
from first
left join second on table_id2 = table_id and table_name2 = table_name
where table_name2 is null;
查询生成器将是;
return DB::table('first')
->leftJoin('second', function ($join) {
$join->on('table_id2', '=', 'table_id');
$join->on('table_name2', '=', 'table_name');
})
->whereNull('table_name2')
->get([
'first.*'
]);
响应 json 将是;
[
{
"table_id": 1,
"table_name": "sale"
},
{
"table_id": 3,
"table_name": "sale"
},
{
"table_id": 2,
"table_name": "note"
}
]
推荐阅读
- html - NSMutableAttributedString 使链接可点击并显示 html 格式
- javascript - React 中的删除线
- excel - Excel:具有周期性跳过单元格的动态范围(用于创建动态图表)
- spring - 创建 spring initializr 项目时无法在 IntelliJ 中解析 org.apache.tomcat.embed:tomcat-embed-el:9.0.33
- xenforo - 迁移后的 Xenforo 图像和附件 URL
- android - 为什么 TextAlign.left 在小部件文本中不起作用?
- python - 在字典中插入相同的字符串值(作为键)
- node.js - 使用 NodeJS 访问旧的 SQL Compact Edition 文件
- javascript - 为什么我的计算器只允许我执行一种操作
- python - 导入 Tensorflow:无法加载原生 Tensorflow 运行时。不知道怎么办 试了很多方法还是不行