laravel - 如何在laravel多对多关系中匹配数据透视表的确切行数?
问题描述
我有表 A、B、AB,这是一个数据透视表,我也为它们创建了各自的关系。现在,当我想获取与数据透视表完全匹配的 id(数组)的数据时。
$idArray = [3,4]
Model_A::whereHas('b', function($q) use ($idArray) {
$q->whereIn('b.id', $idArray);
})
->with(
[
'b' => function($q) use ($idArray) {
$q->whereIn('b.id', $idArray);
},
]
)
->get();
使用 whereIn 即使匹配数组中的一个 id 但我想匹配确切的 id。
示例集合:
[
0 : {
sample_data,
B:[
0:{
sample_data,
id:2
},
1:{
sample_data,
id:3
},
2:{
sample_data,
id:4
}
]
},
1 : {
sample_data,
B:[
0:{
sample_data,
id:3
},
1:{
sample_data,
id:4
},
2:{
sample_data,
id:5
}
]
},
2 : {
sample_data,
B:[
0:{
sample_data,
id:3
},
1:{
sample_data,
id:4
},
]
},
3 : {
sample_data,
B:[
0:{
sample_data,
id:3
},
1:{
sample_data,
id:4
},
]
}
]
现在我只想要以下结果$idArray = [3,4]
。
[
0 : {
sample_data,
B:[
0:{
sample_data,
id:3
},
1:{
sample_data,
id:4
},
]
},
1 : {
sample_data,
B:[
0:{
sample_data,
id:3
},
1:{
sample_data,
id:4
},
]
}
]
在上图中,我使用 $idArray = [1,5] 获取目的地(数据透视表)的数据,它也获取目的地 1,5 和 1 的数据,但我只想获取两个目的地都有 1,5 的数据。不仅有 1 个或只有 5 个,而且两者都有,但也不喜欢 1、5、6 等
解决方案
查看使用辅助函数查询关系存在的文档wherehas
。
使用该函数,如果它与表 B 有关系,则只能从表 A 中提取,而表 B 将从表 B 中获取确切的 ID。像这样:
$idArray = [3,4]
A_Model::whereHas('b', function($query) use ($idArray){
$query->whereIn('id', $idArray);
})
->with(['B'=>function($q) use ($idArray) {
$q->whereIn('B.id', $idArray)
}])
->get();
推荐阅读
- html - 如何更改 html 和 css 中 svg 文件中每个路径的颜色?
- reactjs - 渲染结果后如何清空状态?
- r - ggplot中的累积平均折线图
- terraform - 使用 terraform 对 Azure 上的应用服务进行动态 IP 限制
- dynamics-crm - Microsoft CRM 动态 - 自动填充错误
- python - 在python中一起绘制指数和多项式函数
- vue.js - 使用 vue test utils 和 jest 测试 VuexOrm
- copy - 如何复制odoo中的one2many文件?
- javascript - 可以通过 Web 向桌面应用程序发出请求吗?
- sql - 如果 SQL Server 中列中的所有值都为空,如何排除该列?