2017-09-17 1 views
0

Je programme panier dans Doctrine et Nette Framework. Il y a la méthode addItem: (ajouter à la session panier)Doctrine panier après l'ordre d'ajout: undefined index

public function addItem($item) { 
    $cart = $this->getCartSection(); 
    $product = $this->product_facade->getProduct($item['voucher_id']); 

    if (isset($cart->cart_items[$product->getId()])) { 
     $cart->cart_items[$product->getId()]['amount'] += $item['amount']; 
    } else { 
     $cart->cart_items[$product->getId()] = array(
      'voucher' => $product, 
      'amount' => $item['amount'] 
     ); 
    } 
} 

Et il existe une méthode pour l'ordre d'ajouter db

public function add($creator, $data) {  
    $order = new Orders(); 
    $order->setPrice($data['price']); 
    $order->setStatus($this->status_facade->getStatus(self::NEW_STATUS_ID)); 
    $order->setPayment($this->payment_facade->getPayment($data->payment)); 
    $order->setDate(new DateTime()); 
    $order->setUser($creator); 

foreach ($data['cart'] as $item) {  
     $order_product = new OrdersProduct(); 
     $order_product->setQuantity($item['amount']); 
     $order_product->setProduct($item['voucher']); 

     $order->addItem($order_product); 
    } 

    $this->em->persist($order); 
    $this->em->flush(); 
} 

J'obtiens l'erreur après un clic à bouton « ajouter à la commande »

Undefined index: 00000000659576f8000000004032b93e 

Mais je sais où est une erreur. Il existe une méthode add et cette méthode obtient l'entité Product de la session.

$order_product->setProduct($item['voucher']); 

J'ai besoin de l'entité de produit dans la session parce que je veux compter le prix total dans le chariot. Si j'appelle méthode add setProduct avec le numéro ou $item['voucher']->getId() (cette variable est une entité de Product)

$order_product->setProduct(
    $this->product_facade->getProduct(4) 
); 

Il est OK, mais je ne sais pas, pourquoi je l'appelle entité produit de la session est wronk. C'est la même méthode avec le même résultat.

Pouvez-vous m'aider avec le problème? Savez-vous pourquoi Wronk est?

Merci, j'espère que vous me comprenez.

+0

OK, il est mauvaise chose, sauf entité à la session. Dans les objets de sérialisation de session. Je dois enregistrer seulement l'ID à la session. – ondrusu

Répondre

1

Vous ne pouvez pas enregistrer des entités dans une session. La doctrine utilise Identity Map. Enregistrer uniquement l'ID d'entité à la session et lire l'entité de la base de données avant de travailler avec elle. Si vous avez besoin de plus de données en session, n'utilisez pas d'entité pour cela. Outil à plume DTO.

+0

Oui, je sais maintenant. Je vous remercie. – ondrusu