Я бы хотел отфильтровать элемент (в данном случае пабы) по некоторым характеристикам, которые хранятся в отдельной таблице (в нашем случае это tapps), и оба они связаны pub_tapps.
У меня есть следующие таблицы: pubs, tapps, pub_tapps (pub_id, tapp_id)
Отношение между Pub и Tapp следующее:
public function pubTapps()
{
return $this->belongsToMany(Tapp::class, 'pub_tapps');
}
в моем пабеМодель Я попробовал следующее тестирование для массива $ 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();
}
Это работает отлично, но для данного трехмерного массива ...
Как я могу сделать для массива длины n ??
Я пробовал это, но не работает вообще (возвращает пустой массив):
return $pubs = Pub::whereHas('pubTapps', function ($query) use
($tapps_chosen) {
foreach ($tapps_chosen as $tappId) {
$query->where('tapp_id', $tappId);
}
})->get();
Что бы я имелсделать???Любые идеи, чтобы заставить это работать ??
Большое спасибо!