Bonjour,

je ne suis pas sur de bien placer ma question mais puisque Laravel utilise Eloquent...

je dispose d'une table products_range (famille1, famille2),
chacune de ces familles ayant plusieurs catégories(table catégories ayant un champ range_id)
et chaque catégorie plusieurs produits (table products ayant un champ category_id).

products_range :
    id|name
categories :
    id|range_id|name
products :
    id|cat_id|name

Dans mon controller, je récupere d'abord l'id de la famille que je souhaite afficher :

$range = RangeModel::getRange("Instrumentation");

Ensuite je récupere toutes les catégories appartenant à cette famille :

$categories = CategoriesModel::where('range_id','=',$range->id)->get();

Quand je clique sur le lien correspondant a une famille j'arrive sans problème a afficher les catégories correspondantes. Mais j'aimerais bien afficher aussi tous les produits de cette famille (ie tous les produits de chaque catégorie appartenant à une famille). evidemment je n'ai pas de champ range_id dans ma table products`

2 réponses


T'y est presque, la façon dont je m'y prendrait c'est de créer un tableau avec toutes les id des catégories récuperer, ensuite query le ProductModel avec whereIn. Ca donnerait quelquechose du genre:

<?php
/* ... ton code */
$cat_ids = array();
foreach($categories as $c){
    $cat_ids[] = $c->id;
}
$products = ProductModel::whereIn('category_id', $cat_ids)->get();

?>

Pas complètement sur de la syntaxe mais c'est quelquechose dans ces lignes là, cherche la doc de laravel pour whereIn

mrdus
Auteur

merci pour ta réponse,

j'ai fini par trouver dans la docs Laravel, la relation hasmanythrough

https://laravel.com/docs/5.4/eloquent-relationships#has-many-through

class RangeModel

    public function products()
    {
        return $this->hasManyThrough('app\models\ProductsModel','app\models\CategoriesModel','range_id','cat_id','id');
    }

ProductsController :

$products = RangeModel::find($range['id'])->products;