php - 查询关系存在,如何根据数组长度添加条件
问题描述
我想通过存储在单独的表(在本例中为tapps)中的一些特征来过滤一个项目(在本例中为 pubs),并且两者都与 pub_tapps 相关。
我有以下表格:pubs、tapps、pub_tapps(pub_id,tapp_id)
Pub 和 Tapp 之间的关系如下:
public function pubTapps()
{
return $this->belongsToMany(Tapp::class, 'pub_tapps');
}
在我的 Pub 模型中,我尝试对数组 $request=[5,8, 7] 进行以下测试:
public function pubsFilteredByTapps(FilteredTappsPubsRequest $request)
{
$tapps_chosen = $request->get('tapps');
$tapps_chosen = is_string($tapps_chosen) ? explode(',', str_replace('"', '', $tapps_chosen)) : $tapps_chosen;
return Pub::whereHas('pubTapps', function($query) use($tapps_chosen) {
$query->where('tapp_id', $tapps_chosen[0]);
})
->whereHas('pubTapps', function($query) use($tapps_chosen) {
$query->where('tapp_id', $tapps_chosen[1]);
})
->whereHas('pubTapps', function($query) use($tapps_chosen) {
$query->where('tapp_id', $tapps_chosen[2]);
})
->get();
}
这是完美的工作,但对于给定的 3 维数组......
我该如何处理一个 n 长度的数组?
我试过这个,但根本不起作用(返回一个空数组):
return $pubs = Pub::whereHas('pubTapps', function ($query) use
($tapps_chosen) {
foreach ($tapps_chosen as $tappId) {
$query->where('tapp_id', $tappId);
}
})->get();
我该怎么办???有什么想法让它工作吗?
非常感谢!
解决方案
用这个:
$query = Pub::query();
foreach ($tapps_chosen as $tappId) {
$query->whereHas('pubTapps', function($query) use($tappId) {
$query->where('tapp_id', $tappId);
});
}
return $query->get();
推荐阅读
- python - 有没有办法在条带方法中使用正则表达式模式
- math - 如何从等角投影坐标转换为 3D 坐标
- react-native - Expo - 如何制作自定义权限消息
- java - 我无法更改 RSyntaxTextArea 库上的装订线颜色
- python - 如何在 PubChemPy 中使用 searchtype 选项
- javascript - 在 express 中通过中间件传递参数
- android - 如何在从服务运行的活动中显示片段?
- java - 从 Eclipse 中的默认包中引用外部文件的问题
- assembly - 如何在 32 位 arm 处理器中加载 64 位数字?
- python - 是否可以根据前一行过滤 Python 中的输出