Je voudrais filtrer un élément (pubs, dans ce cas) par certaines caractéristiques qui sont stockées dans une table séparée (tapps, dans ce cas), et les deux sont liés par pub_tapps.
J'ai les tables suivantes : pubs, tapps, pub_tapps(pub_id, tapp_id)
La relation entre Pub et Tapp est la suivante :
public function pubTapps()
{
return $this->belongsToMany(Tapp::class, 'pub_tapps');
}
dans mon modèle Pub, j'ai essayé les tests suivants pour un tableau $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();
}
Cela fonctionne parfaitement, mais pour un tableau en 3 dimensions donné...
Comment puis-je faire pour un tableau d'une longueur n ??
J'ai essayé ceci, mais cela ne fonctionne pas du tout (renvoie un tableau vide):
return $pubs = Pub::whereHas('pubTapps', function ($query) use
($tapps_chosen) {
foreach ($tapps_chosen as $tappId) {
$query->where('tapp_id', $tappId);
}
})->get();
Que devrais-je faire ??? Des idées pour que ça marche ??
Merci beaucoup!
Utilisez ceci:
$query = Pub::query();
foreach ($tapps_chosen as $tappId) {
$query->whereHas('pubTapps', function($query) use($tappId) {
$query->where('tapp_id', $tappId);
});
}
return $query->get();
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots