Laravel 5

Récuperation du slug d'une catégorie dynamique

  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    57

    Salut!
    j'ai une relation belonsToMany entre deux tables.
    Un Exemple: produit et category.
    j'affiche tout les produits sur la page d'accueil et je souhaite au clique sur une catégorie ça me retourne que les produits de l'article.
    Model Product, Model Category et Model Category_Product.
    Affichage des catégories dans la vue principale

    @foreach($cats as $c)
    <li class="{{ setActiveCategory($c->slug) }}"><a href="{{ route('boutique.slug', $c->slug) }}">{{ $c->name }}</a></li>
    @endforeach

    Route

    Route::get('/products/{slug}', 'Front\PageController@boutique_slug')->name('boutique.slug')->where('slug' , '^[a-zA-Z0-9]+([-]?[a-zA-Z0-9]+)*$');

    Controller

    public function boutique_slug($slug)
    {
    $products = Product::where('slug', $slug)->firstOrFail();
    dd($products);
    $cats = Category::all();

    return view('front/articles/products-categorie', compact( 'cats', 'products') );
    }

    Resultat vide! Je ne sais pas pourquoi.
    Merci de m'aider à écoluer!

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2178

    Si je comprends bien c'est le slug de la catégorie et tu fais la recherche sur les produits...

  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    57

    Oui Oui M. BestMomo

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2178

    Alors ça serait plutôt ça :

    $products = Category::whereSlug($slug)->products()->get();
  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    57

    J'ai une erreur, me disant que "products" sa n'existe pas!

    "Method Illuminate\Database\Query\Builder::products does not exist."

    Model category

    class Category extends Model
    {
    protected $table = "category";

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

    Model Product

    class Product extends Model
    {
    protected $fillable = [
    'name', 'slug','description'
    ];
    public function category()
    {
    return $this->belongsToMany('App\Models\Category');
    }

    }

    Model CategoryProduct

    class CategoryProduct extends Model
    {
    protected $table = 'category_product';

    protected $fillable = ['product_id', 'category_id'];
    }
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2178

    Ah oui...

    $products = Category::whereSlug($slug)->firstOrFail()->products()->get();
  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    57

    Merci M. Betsmomo sa marche à la perfection.
    J'aimerai avoir une petite explication si possible avant de fermer cette discussion.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2178

    Category::whereSlug($slug) on cherche la catégorie avec le slug $slug

    Category::whereSlug($slug)->firstOrFail() comme on prend un seul enregistrement on retourne un modèle Category ou on envoie un erreur s'il n'y a aucune catégorie avec ce slug

    Category::whereSlug($slug)->firstOrFail()->products() on utilise la relation pour aller chercher tous les produits de la catégorie

    Category::whereSlug($slug)->firstOrFail()->products()->get() on lance la requête et on retourne une collection

  • Avatar de SergeKonan
    Membre depuis :
    16/06/2017
    Messages :
    57

    Bien compris! Encore une fois Bestmomo

  • Avatar de RyanKeli
    Membre depuis :
    11/04/2017
    Messages :
    11

    S'il te plait SergeKonan, pourrais-je avoir les attributs de tous les modèles.

    Category, Product, Category_product

    Merci, cordialement.

Vous ne pouvez pas répondre à ce sujet.