Besoin d'aide ?

Récupérer les données de 3 tables

  • Avatar de BilalIghmouracene
    Membre depuis :
    08/06/2017
    Messages :
    22

    Bonjour,

    Voici mon problème, j'ai trois tables :
    1- Semestres

    semestre 1
    semestre 2
    -...
    2- Unites
    -Langue

    histoire
    -...
    3- Modules (table pivot)
    -Français 1
    -anglais 2
    -...
    J'ai donc des semestres qui contienent plusieurs unites, les unites qui contienent plus semestres et plusieurs modules, et un module appartient à une seule unite
    Mon souhait est de tout récupérer en cascade et de rassembler les modules dans la même unite sans la répéter.

    Pour tous récupérer j'ai fait ça :
    $semestres = Semestre::with('unites')->with('unites.modules')->get();

    dans le Model Semestre j'ai défini cette fonction :

    public function unites(){
    return $this->belongsToMany('App\Unite','modules')->withPivot('module as module');
    }

    et dans la vue j'ai fait ça :

    @foreach($semestres as $semestre)

    @foreach($semestre->unites as $unite)

    @endforeach
    @endforeach

    Le résultat que j'ai eu :

    semestre 1

    -langue

    -français

    -langue

    -anglais

    Alors que moi je souhaite avoir ça :

    semestre 1

    -langue

    -français

    -anglais

    (sans répéter langue 2 fois)

    Je vous remercie par avance.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1644

    Bonjour,

    Je ne comprends pas la partie ->withPivot('module as module') parce que le schéma semble classique :

    • Semestre belongToMany Unite
    • Unite belongToMany Semestre
    • Unite hasMany Module
    • Module belongsTo Unite

    Du coup avec :

    $semestres = Semestre::with('unites.modules')->get();

    Tu dois tout récupérer en cascade :

    @foreach($semestres as $semestre)
    echo $semestre->nom
    @foreach($semestre->unites as $unite)
    echo $unite->nom
    @foreach($unite->modules as $module)
    echo $module->nom
    @endforeach
    @endforeach
    @endforeach
  • Avatar de BilalIghmouracene
    Membre depuis :
    08/06/2017
    Messages :
    22

    Merci beaucoup pour votre réponse.
    Je voulais spécifier les schamps à récupérer c'est pour que j'avais mis withPivot, mais au final ça ne sert à rien.

    J'ai maintenant un autre problème concernant la répétition.
    Il m'affiche pour l'instant :

    Semestre 1

    unite 1-1
    module 1-1-1
    module 1-1-2

    unite 1-1
    module 1-1-1
    module 1-1-2

    unite1-2
    module 1-2-1

    Et moi je ne souhaite pas répéter les unites plusieurs fois. Pour l'instant elles sont répétées autant de modules qu'elles contienent.

    Le résultat que je souhaite avoir :

    unite 1-1
    module 1-1-1
    module 1-1-2

    unite1-2
    module 1-2-1

    Je te remercie encore une fois pour ton aide si précieux.
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1644

    Bonjour,

    S'il y a une répétition c'est que la table pivot entre les semestres et les unités a été renseignée plusieurs fois.

  • Avatar de BilalIghmouracene
    Membre depuis :
    08/06/2017
    Messages :
    22

    table pivot : modules

    id1=>module 1=>unite 1=>semestre1
    id2=>module 2=>unite 1=>semestre1
    id3=>module 3=>unite 2=>semestre1

    Donc quand je récupère mes modules je reçois ça :
    semestres 1
    unite 1-1

    module 1-1-1

    module 1-1-2

    unite 1-1

    module 1-1-1

    module 1-1-2

    unite1-2

    module 1-2-1
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1644

    Salut,

    Il ne faut pas mettre la table modules en pivot mais créer une autre table semestre_unite comme pivot.

  • Avatar de BilalIghmouracene
    Membre depuis :
    08/06/2017
    Messages :
    22

    Merci beaucoup c'est ce que je voulais.

Vous ne pouvez pas répondre à ce sujet.