Bonjour à tous,

J'ai un petit problème, probablement de façon de faire.

J'affiche des Formations, qui ont des unités, qui ont des modules et qui ont des lessons.

Seulement, je ne souhaite afficher pour chacune des tables, toutes en relation, les entrées qui ont le champ show à 1.

Lorsque j'affiche mon arborescence, je fais :

foreach de formations
foreach de formation->unités
foreach de unité->modules
foreach de module->lessons

En utilisant donc une requête basique des formations all au départ.

J'ai tenté de faire un scope local mais c'est du coup uniquement sur les formations et pas sur les relations, plutôt logique.

J'ai donc tenté un scope global, qui fonctionne sur chaque requete de table individuellement mais pas dans mon cas ou je recupère mes formations et que j'affiche les relations.

Il y a peut-être une façon plus simple de gérer la chose mais je ne vois pas bien laquelle ?

En vous remerciant.

1 réponse


Kylesixtine
Auteur
Réponse acceptée

J'ai résolu de cette façon :

$candidatformation = CandidatFormation::where('id',$candidatformation_id)
->with([
'formation' => function ($query) {
$query->where('show',1);
},
'formation.unities' => function ($query) {
$query->where('show',1);
},
'formation.unities.modules' => function ($query) {
$query->where('show',1);
},
'formation.unities.modules.lessons' => function ($query) {
$query->where('show',1);
}
])
->firstOrFail();

Il y a peut être une solution différente, mais celle ci fonctionne.