Bonjour,

je voulais savoir si il etait possible de faire une relation belongsto -> belongstomany

j'ai une table A qui BelongsTo B et B qui belongsTmany C avec une table pivot.

A : id , B_id
B : id
pivot: B_id , C_id
C : id

je voudrais récupérer A->C

Merci

5 réponses


C'est possible ;) il faut utiliser hasManyThrough


class A
{
    public function C()
    {
        return $this->hasManyThrough(C::class, B::class);
    }
}

Bien sur ta classe B doit avoir une function A qui return un belongTo A

Elensars
Auteur

tu es sur ? car j'ai une table pivot entre les deux ? hasManyThrough il ne faut pas avoir deux has many ?

Elensars
Auteur

javais fais : mais ca prend lid de la table a pour trouver c

$this->belongsTo(B::class)->getRelated()
->belongsToMany(C::class), (new pivot)->getTable());

Alors nope, hasManyThrought c'est comme un hasMany clasique, donc avec un one to many ou un many to many, mais en gros ça veut dire "has many en passant par cette table"

Il s'en fiche du pivot, il regarde la relation, et depuis le modèle B tu fait ta relation en utilisant "using" ton pivot

Après je dis ça à l'aveugle, si c'est trop compliqué faudra peut être oublier la relation et faire une subquery ^^'

Alors il faut en premier un parametre hasmany
Et en deuxieme parametre un intermédiaire (through)