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