public function buy() { $totalSum = 0; $cart = Session::get('cart'); $this->product->startTran(); $productsFromCart = $this->getProductsFromCart($cart); foreach ($productsFromCart as $item) { if ($this->product->changeQuantity($item['id'], $item['cart_quantity']) !== 1) { $this->product->rollback(); Session::setError('not enough available product'); Redirect::back(); } $totalSum += $item['price'] * $item['cart_quantity']; } $user = new User(); if ($user->changeUserCash(Auth::getUserId(), $totalSum) !== 1) { $this->product->rollback(); Session::setError('not enough money'); Redirect::back(); } foreach ($productsFromCart as $item) { if ($user->addProduct(Auth::getUserId(), $item['id'], $item['cart_quantity'], $item['price']) !== 1) { $this->product->rollback(); Session::setError('something went wrong'); Redirect::back(); } } $this->product->commit(); Session::remove('cart'); Session::setMessage('Done'); Redirect::to('user/cart'); }