I have cart on the site and so far everything work perfectly. Now I'm trying to make quantity for each product which admin can add in backend ( already done ) and when customer order product(s) to decrease quantity in database.
So far as I said admin panel is ready and can add quantity to product which is saved in database. Here is my cart submit controller
public function orderSubmit() {
$cart = Session::get(self::CART_SESSION_KEY, array());
if (count($cart) < 1) {
return Redirect::to('/');
}
$validatorRules = array(
'captcha' => 'required|captcha'
);
Input::merge(array_map('trim', Input::all()));
$validator = Validator::make(Input::all(), $validatorRules);
if ($validator->fails()) {
return Redirect::to('/cart/order?_token=' . csrf_token())->withErrors($validator->errors())->withInput(Input::except(['captcha']));
}
$order = new Order();
$order->user_id = self::$user->user_id;
$order->data = json_encode($cart, true);
$order->info = Input::get('additional_info');
$order->save();
Session::put(self::CART_SESSION_KEY, array());
return Redirect::to('/)->with('message_success', 'Order created! We will contact you shortly to confirm your order details.');
}
The cart is saved in $order->data = json_encode($cart, true);
and in database information for product(s) etc look
{"title":"Test Product","description":"You save 25%","quantity":1,"price":135}
If there are multiple products in order above array will have also them.
What I can't understand is how to extract which product is ordered and how many pieces from it so I can later update database quantity field for each product?
I don't even know from where to start.
Assuming
$cart
is an array and based on the json you provided, you'll need to:$cart
otherwise it will be pretty much impossible to know what are the products for that orderWith the product id for each product on the
$cart
, you can now loop the cart products and update them. Something like the following code.I added the code for the transaction to assure the quantity is decreased when the order is stored correctly.