Laravel 5

Panier avec deux model différent

  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    10

    Bonjour, je réalise un site web et j'ai un soucis avec mon panier d'achat ...

    J'ai un model "gammes" et un autre dans mon code ... J'arrive a les différencier dans ma session mais je n'arrive pas a faire une auto incrémenation dans ma fonction add ...

    public function __construct()
    {
    if(!\Session::has('cart'))\Session::put('cart',array());

    }

    public function addGammes($id)
    {

    $gammes = Gammes::findOrFail($id);
    $gammes->quantity=1;
    / $gammes->quantity+=1;/

    $cart = \Session::get('cart');
    dd($gammes);
    $cart[$gammes->id]=$gammes;

    \Session::put('cart',$cart);

    // dd($cart[$gammes->id]);

    \Session::push('cart',$cart[$gammes->id]->quantity+=1);

    dd($cart[$gammes->id]->quantity);// retourne toujours 2 ...

    flash('Gammes ajoute au panier')->success();
    return back();

    }
    public function addLivres($id)
    {

    $article=Produit::findOrFail($id);
    $cart= \Session::get('cart');
    $article->quantity+=1;
    $cart[$article->id]=$article;
    \Session::put('cart',$cart);

    flash('Produit ajoute au panier')->success();
    return back();
    }

    Merci d'avance de votre retour

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

    Salut,

    Je n'ai jamais enregistré un objet en session parce que je n'en ai jamais eu besoin. Je sais que PHP procéde à une sérialisation mais il me semble avoir lu quelque part qu'il vallait mieux en faire une soi-même pour être sûr du résultat.

    Mais franchement pour un panier d'achat il n'y a pas plus simple que d'envoyer des modèles en session ?

    D'autre part il existe un excellent package de panier.

  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    10

    Salut,

    Merci de ta réponse bestmomo mais le soucis est que dans ce projet. J'ai mes deux tables différentes et ce package plante car j'ai la possibilité d'avoir deux fois le même id:/

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

    Salut,

    Tu peux peut-être t'en sortir avec deux instances de Cart, une pour chaque modèle. Il faut un peu bidouiller le package. Par exemple tu surcharges le provider en liant deux instances dans le container. Tu crées deux façades et ça devrait tourner...

    Il faut aussi sans doute désactiver le reconnaissance automatique du package dans ton package.json.

    Edit :

    J'ai regardé de plus près le package, tu peux associer chaque item du panier à un modèle spécifique :

    Because it can be very convenient to be able to directly access a model from a CartItem is it possible to associate a model with the items in the cart. Let's say you have a Product model in your application. With the associate() method, you can tell the cart that an item in the cart, is associated to the Product model.

  • Avatar de Farris27
    Membre depuis :
    31/10/2017
    Messages :
    10

    Salut,

    merci de ta réponse mais j'avais déja trouvé une autre solution :)

    la voici :

    `public function addGammes($slug)
    {

    $gammes = Gammes::where('slug', $slug)->first();

    $oldCart = \Session::has('panier') ? \Session::get('panier') : null;

    / $cart= \Session::get('panier');
    $gammes->quantity+=1;
    $cart[$slug]=$gammes;
    \Session::put('panier',$cart);
    /

    // dd($oldCart[$id]);

    //dd($oldCart);
    if($oldCart== null){
    $cart = \Session::get('panier');
    $gammes->quantity=1;
    $cart[$slug]=$gammes;

    \Session::put('panier',$cart);
    }
    else{

    $cart = \Session::get('panier');
    if(isset($cart[$gammes->slug])){
    $cart = \Session::get('panier');

    \Session::put('panier',$cart,$cart[$gammes->id]->quantity+=1);
    }
    else{
    $cart = \Session::get('panier');
    $gammes->quantity=1;
    $cart[$gammes->id]=$gammes;
    \Session::put('panier',$cart);
    }

    //dd(\Session::get('panier'));

    }

    // dd($cart[$gammes->id]);

    // dd($cart[$gammes->id]->quantity);

    flash('Gammes ajoute au panier')->success();
    return back();

    }
    public function addLivres($slug)
    {

    $produit = Produit::where('slug', $slug)->first();
    $oldCart = \Session::has('panier') ? \Session::get('panier') : null;

    if($oldCart== null){
    $cart = \Session::get('panier');
    $produit->quantity=1;
    $cart[$slug]=$produit;

    \Session::put('panier',$cart);
    }
    else{

    $cart = \Session::get('panier');
    if(isset($cart[$produit->slug])){
    $cart = \Session::get('panier');

    \Session::put('panier',$cart,$cart[$produit->slug]->quantity+=1);
    }
    else{
    $cart = \Session::get('panier');
    $produit->quantity=1;
    $cart[$produit->slug]=$produit;
    \Session::put('panier',$cart);
    }

    //dd(\Session::get('panier'));

    }

    / $article=Produit::findOrFail($id);
    $cart= \Session::get('panier');
    $article->quantity+=1;
    $cart[$article->id]=$article;
    \Session::put('panier',$cart);
    /

    flash('Produit ajoute au panier')->success();
    return back();
    }`

Vous ne pouvez pas répondre à ce sujet.