public function actionOrder() { $order = new Order(); /* @var $cart ShoppingCart */ $cart = \Yii::$app->cart; /* @var $products Product[] */ $products = $cart->getPositions(); $total = $cart->getCost(); if ($order->load(\Yii::$app->request->post()) && $order->validate()) { $transaction = $order->getDb()->beginTransaction(); $order->save(false); foreach ($products as $product) { $orderItem = new OrderItem(); $orderItem->order_id = $order->id; $orderItem->title = $product->title; $orderItem->price = $product->getPrice(); $orderItem->product_id = $product->id; $orderItem->quantity = $product->getQuantity(); if (!$orderItem->save(false)) { $transaction->rollBack(); \Yii::$app->session->addFlash('error', 'Cannot place your order. Please contact us.'); return $this->redirect('catalog/list'); } } $transaction->commit(); \Yii::$app->cart->removeAll(); \Yii::$app->session->addFlash('success', 'Thanks for your order. We\'ll contact you soon.'); $order->sendEmail(); return $this->redirect('catalog/list'); } return $this->render('order', ['order' => $order, 'products' => $products, 'total' => $total]); }
public function actionOrder() { $order = new Order(); /** @var ShoppingCart $cart */ $cart = \Yii::$app->cart; /* @var $products Product[] */ $products = $cart->getPositions(); if ($order->load(\Yii::$app->request->post()) && $order->validate()) { $transaction = $order->getDb()->beginTransaction(); $order->save(false); // part of the transaction; foreach ($products as $product) { $orderItem = new OrderItem(); $orderItem->order_id = $order->id; $orderItem->product_id = $product->id; $orderItem->title = $product->title; $orderItem->price = $product->getPrice(); $orderItem->quantity = $product->getQuantity(); if (!$orderItem->save(false)) { $transaction->rollBack(); Yii::$app->session->setFlash('error', 'Your order cannot be accepted. Please contact us!'); $this->goBack(); } } $transaction->commit(); Yii::$app->cart->removeAll(); Yii::$app->session->addFlash('message', 'Thanks for your order. We\'ll contact you soon!'); // $order->sendEmail(); $this->redirect('/'); } return $this->render('order', ['order' => $order, 'products' => $products, 'total' => $cart->getCost()]); }
/** * @return \yii\db\ActiveQuery */ public function getOrderItems() { return $this->hasMany(OrderItem::className(), ['product_id' => 'id']); }