添加订单后的学说购物车:未定义的索引



i在学说和Nette框架中编程购物车。有addItem方法:(添加到会话购物车)

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

,有一种方法可以将顺序添加到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();
}

单击按钮"添加到订单"

我会出现错误
Undefined index: 00000000659576f8000000004032b93e

,但我知道一个错误。有一种方法add,此方法从会话中获取产品实体。

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

我需要会话中的产品实体,因为我想要购物车中的总价格。如果我在使用数字或$item['voucher']->getId()的添加方法setProduct中调用(此变量是Product的实体)

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

没关系,但是我不知道,为什么我将Session的产品实体称为Wronk。这是相同的方法,结果相同。

您能帮我解决问题吗?你知道为什么wronk吗?

谢谢你,希望你能理解我。

您无法将实体保存到会话中。学说使用身份图。

仅将实体ID保存到会话中,并在使用数据库之前从数据库中读取实体。如果您需要更多的数据,请不要为此使用实体。Reather Imental dto。

实际上您可以将实体存储在会话中。您可以在学说文档中阅读更多:

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/entities-in-session.html

从会话中检索实体时,您需要在EntityManager

上调用merge
$entity = $this->em->merge($entityFromSession);

相关内容

  • 没有找到相关文章

最新更新