1
votes

Comment obtenir un tableau de relations imbriquées dans un seul tableau dans Laravel

Modèle d'article:

public function make(){
    return $this->belongsTo(Make::class,'make_id','id');
}

Dans le modèle ItemMake:

public function item_makes(){
     return $this->hasMany(ItemMake::class,'item_id','id');
}

J'ai besoin d'obtenir un tableau de toutes les marques en fonction de item_id. Comment y parvenir? Merci d'avance.


0 commentaires

3 Réponses :


1
votes

Essayez quelque chose comme ceci:

Item::findOrFail(1)
    ->with('item_makes.make')
    ->get()
    ->pluck('make')
    ->flatten()
    ->toArray()


3 commentaires

Merci beaucoup monsieur :)


Vous pouvez également utiliser la méthode whereHas de Make model. De cette façon, vous n'aurez pas besoin d'aplatir ou de cueillir.


Je suis d'accord, mais vous auriez également besoin d'une sous-requête pour obtenir uniquement les marques appartenant à item_makes d'un élément avec l'ID donné.



1
votes

Essayez la méthode wherehas quelque chose comme ceci

$makes = Make::whereHas('item_makes', function ($query) use($item_id) {
   $query->where('item_id',  $item_id);
})->get();


0 commentaires

1
votes

Cela a fonctionné pour moi.

$item = Item::findOrFail(1)
         ->item_makes()
         ->with('make')
         ->get()
         ->pluck('make')
         ->flatten()
         ->toArray();


0 commentaires