【发布时间】:2018-10-24 07:19:54
【问题描述】:
我想通过存储在单独的表(在本例中为 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();
我该怎么办???有什么想法让它发挥作用吗??
非常感谢!
【问题讨论】:
-
dd($tapps_chosen);在return Pub::之前的结果是什么? -
[5,8, 7],在我使用的测试用例中(我选择 tapp_id= 5, 7 和 8)。我用这个 $tapps_chosen = is_string($tapps_chosen) ? explode(',', str_replace('"', '', $tapps_chosen)) : $tapps_chosen; 因为 Swagger
标签: php laravel subquery filtering has-many