relation

Par Elensars, il y a 4 ans


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

popotte, il y a 4 ans

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, il y a 4 ans

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

Elensars, il y a 4 ans

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

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

popotte, il y a 4 ans

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 ^^'

popotte, il y a 4 ans

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