2017-09-17 12 views
0

私はDoctrineとNette Frameworkのショッピングカートをプログラムします。 addItem方法があります:(セッションカートに追加)Doctrineショッピングカートの後に注文を追加:未定義のインデックス

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'] 
     ); 
    } 
} 

はまた

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(); 
} 

をdbに追加注文の方法がある私は、ボタンをクリックした後にエラーが発生します

」を順に追加]
Undefined index: 00000000659576f8000000004032b93e 

ただし、どこがエラーであるかはわかります。メソッドaddがあり、このメソッドはSessionからProductエンティティを取得します。

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

私はカート内の総額をカウントしたいのでセッションに製品エンティティが必要です。 私は

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

(この変数はProductから実体である)番号または$item['voucher']->getId()でaddメソッドsetProductに呼び出す場合、私はセッションから、製品のエンティティを呼び出す理由、それはOKですが、私は知らないがwronkです。これは同じ結果と同じ方法です。

問題を解決できますか?なぜワロンですか?

ありがとう、私はあなたが私を理解してくれることを願っています。

+0

OKにmergeを呼び出す必要があり、それは、セッションへのエンティティの保存間違ったことです。セッションの直列化オブジェクト内。セッションにはIDだけを保存する必要があります。 – ondrusu

答えて

1

セッションにエンティティを保存することはできません。 DoctrineはIdentity Mapを使用します。

エンティティIDのみをセッションに保存し、データベースからエンティティを読み取ってから操作します。セッションでさらにデータが必要な場合は、そのためにentityを使用しないでください。 Reather implement DTO

+0

はい、私は今知っています。ありがとうございました。 – ondrusu