Bonsoir,

J'ai fait un schéma de ce que j'ai fait :

http://i.imgur.com/b7WYg2N.png

Maintenant, je dois faire ceci :

récupérer tous les produits, et connaitre dans quelle catégorie, sous cat..... ils appartiennent.
je dois ressortir les produits de la catégorie X
je dois ressortir les produits de la sous catégorie X
je dois ressortir les produits de la sous sous categorie X

Et là, je suis perdu :(

Merci de votre aide.

5 réponses


Personne n'a de solution pour me débloquer ??

Dans ton Model Product.php :

    public function categories()
    {
        return $this->belongsToMany('App\Categories');
    }

Dans ton Model Category.php :

    public function products()
    {
        return $this->belongsToMany('App\Product');
    }

Dans ton controller :

$products = App\Product::all();
return view(tavue, compact('products));

Dans ta vue :

@foreach($products as $product)
  {{ $product->id }}
  {{ $product->catgeory->name }}
@endforeach

Il manque une table et c'est tout là le problème.

J'ai une tableau pivot "product_categories" contenant 2 champs "product_id" et "category_id"

Et je n'arrive pas du coup.

J'avais fait ceci dans mes modèles :

Dans Product.php

public function categories()
    {
        return $this->belongsToMany('\App\Category', 'product_categories');
    }

Dans Category.php

    public function products()
    {
        return $this->belongsToMany('App\Product', 'product_categories', 'category_id', 'product_id');
    }

Tu vois l'idée ?

Merci

Salut, tout d'abord dans tes relations, pourquoi utilises-tu \App\Category? Tu devrais essayer avec App\Category .
Ensuite, au niveau des conventions, tu devrais appelez ta table de pivot product_category, ainsi tu n'auras pas besoin de référencer les clés etc...

Ensuite, au niveau de tes modèles, est-ce que tu pourrais nous donner des exemples de données, des actions que tu veux effectuer, ou même des messages d'erreurs de ce que tu as essayé de faire? Ça nous aidera sûrement à mieux répondre à ta question :)

Bonne soirée et bon courage!

Bonjour,

Pour suivre tes conseils, j'ai donc renommé la table pivot en product_category.

Dans Product.php

    public function categories()
    {
        return $this->belongsToMany('\App\Category', 'product_categories');
    }

Dois je enlever du coup "product_categories" ?

Dans cette table pivot, j'ai par exemple :

Déjà, je me pose la question, un produit étant dans 3 niveaux de catégories, est ce que je devrais stocker ces 3 niveaux ?

Si on prend pour exemple la capture ci après, est ce que je devrais plutot stocker comme ceci :

product_id | category_id
1 | 2 (catégorie de niveau 1, Mobilier)
1 | 3 (catégorie de niveau 2, Assises)
1 | 6 (catégorie de niveau 3, Fauteil)

Au niveau de la base de données, j'ai une table products avec un id, name et d'autres champs qui n'ont pas d'importance ici.

Une table categories avec ce schéma que je vais vous détailler :

Dans cet exemple, on a

  • Mobilier (catégorie niveau 1)

    • Assises (catégorie niveau 2)
      • Canapé (catégorie niveau 3)
      • Canapé convertible (catégorie niveau 3)
    • Tables (catégorie niveau 2)
      • Table de repas (catégorie niveau 3)
        ......

    Donc, la première chose que je ne parviens pas à faire, c'est de récupérer les produits et lui attachés ses catégories.

    $products = \App\Product::with([????]);

    Je pense que c'est dans le with qu'il faut réussir à récupérer tous les niveaux de catégories.

    Pour créer cette hiérarchisation de catégorie, j'ai utilisé ceci :
    https://github.com/lazychaser/laravel-nestedset

    Je suis sous Laravel 5.2.

    Merci