Besoin d'aide ?

Paiement Methode Post !

  • Avatar de MourareauMathieu
    Membre depuis :
    20/01/2017
    Messages :
    82

    Bonsoir à tous , je suis entrain de crée la methode Post pour le paiement de licences sportive. je rencontre un soucis au moment ou je voudrai récupérer mon objet " item " dans ma methode Post pour injecter une valeur dans une colonne de la table

    j'ai ma route : Route::post('/checkout' , 'PaymentController@postCheckout')->name('checkout');

    et j'ai mon controller PostCheckout

    public function postCheckout(Request $request)
    {
    if(!Session::has('Cart')){

    return view('shop.panier');
    }
    $oldCart = Session::get('Cart') ;
    $cart = new Cart($oldCart);
    dd($cart);

    quand je fais un dd de Cart j'obtient bien les élements de mon panier de la facon suivante :

    Cart {#583 ▼
    +items: array:1 [▼
    2 => array:4 [▼
    "qty" => 1
    "montant" => "160.00"
    "item" => LicencieStructure {#575 ▶}
    "price" => 160.0
    ]
    ]
    +totalQty: 1
    +totalPrice: 160.0
    }

    j'aimerai simplement dans "item" qui contient mon objet , mettre à jour une column de sa table . Par exemple insérer dans la colone etat_paiement = payer .

    Es que ceci est possible ?

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

    Oui c'est possible, mais il faut bien s'adapter à la structure en place, ça doit ressembler à quelque chose comme ça (je ne suis pas sûr de bien comprendre la structure affichée) :

    $cart->items[2]['item']->etat_paiement = 'payer';
  • Avatar de MourareauMathieu
    Membre depuis :
    20/01/2017
    Messages :
    82

    Biensoir bestmomo ! cela semble fonctionner , cependant quand j'ai par exemple deux items dans ma Cart , cela rajoute le champ etat_paiement que sur l'un des deux . existe t-il un moyen d'insérer le champ sur n'important qu'elle item qui est dans Cart ?

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

    Puisque tu as un tableau tu peux faire ce que tu veux. Même si la structure de ce panier m'intrigue un peu...

  • Avatar de MourareauMathieu
    Membre depuis :
    20/01/2017
    Messages :
    82

    j'ai trouvé en faisant :

    public function postCheckout(Request $request)
    {
    if(!Session::has('Cart')){
    return view('shop.panier');
    }
    $oldCart = Session::get('Cart') ;
    $cart = new Cart($oldCart);
    $items = $cart->items;
    foreach($items as $item){
    $item ['item']->etat_paiement = 'payer';
    }

    cette ligne : $item ['item']->etat_paiement = 'payer'
    va insérer en base de donnée juste comme ceci ?

    Pour se qui est de la structure j'ai une Classe Cart , cela te semble correcte ? ou je devrai plutot utiliser un package Shopping Cart sur Github? :

    <?php
    namespace App;
    class Cart
    {
    public $items = null ;
    public $totalQty = 0 ;
    public $totalPrice = 0 ;

    public function __construct($oldCart)
    {
    if ($oldCart){

    $this->items = $oldCart->items;
    $this->totalQty = $oldCart->totalQty;
    $this->totalPrice = $oldCart->totalPrice;
    }
    }

    // fonction pour ajouté un licencié structure au panier
    public function addLicencieStructure($item , $id){
    $storedItem = ['qty' => 0 , 'montant' => $item->activite_licencie->mt_cotisation , 'item' => $item];
    // je regarde si j'ai déja l'élement dans ma cart !
    if($this->items){
    if(array_key_exists($id , $this->items)){
    $storedItem = $this->items[$id];
    }
    }
    $storedItem['qty']++;
    $storedItem['price'] = $item->activite_licencie->mt_cotisation * $storedItem['qty'];
    $this->items[$id] = $storedItem;
    $this->totalQty++;
    $this->totalPrice += $item->activite_licencie->mt_cotisation;

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

    Oui si la colonne existe dans la table elle sera renseignée à partir du modèle.

    Utiliser un package existant en général fait gagner du temps, c'est une question de choix personnel.

  • Avatar de mattminimal
    Membre depuis :
    21/01/2017
    Messages :
    13

    Ok parfait , et pour faire un update de la valeur d´une colone du model la valeur ne change pas par contre quand j´ai testé .. Une syntaxe particuliere est necessaire pour se cas de figure ?

  • Avatar de Romu
    Membre depuis :
    23/02/2017
    Messages :
    25

    Salut,

    Toujours sous réserve que je ne me trompe pas ... En théorie, la methode save() de tes models est censé mettre à jours les champs modifié..
    Est ce que tu as installé debugbar https://github.com/barryvdh/laravel-debugbar ? Tu verra le details de tes requettes comme ca :)

  • Avatar de MourareauMathieu
    Membre depuis :
    20/01/2017
    Messages :
    82

    salut Romu j'avais pas vu ta reponse j'avais trouvé , et oui j'ai debugar et heureusement car dans certains cas de figure c'est indispensable pour débugé et chercher l'erreur

    pour mettre en jour l'objet item il suffit de faire $item['item']->save();

    public function postCheckoutCreditCard(Request $request)
    {
    if(!Session::has('Cart')){

    return view('shop.panier');
    }
    $oldCart = Session::get('Cart') ;
    $cart = new Cart($oldCart);
    $items = $cart->items;

    // on inject le nouveau statut de la licence
    foreach($items as $item){

    $item['item']->statut_licence_id = LicenceStatut::where('id' , '4')->firstOrFail()->id;

    $item['item']->save();
    }

    Bonne journée a tous ! :)

Vous ne pouvez pas répondre à ce sujet.