i want to insert a record of form fields in table and also values from session array
i have a form with following fields
name,email,address
and i have session array 'cartS'
like this
"cartS": [
{
"pid": "1",
"qnty": "3"
},
{
"pid": "2",
"qnty": "2"
}
],
so i have a table in which following fields
---------------------------------------------------------------------------------------------
id(auto increment) uid(user's id) pid(product id) qnty(quantity) name email address
---------------------------------------------------------------------------------------------
here i have model
called order model
i have one controller
in which there is public function placeorder(Request $request)
i can get value from form-fields using $request
but what about pid
and qnty
which are in session array(associative array)
if i do foreach loop then it only gives value of one key but i have 2 keys in session array
$sessionCart=Session::get('cartS');
foreach($sessionCart as $key=>$value){
$pid=$value['pid'];
$qnty=$value['qnty'];
}
if i return $pid
then it gives only first key’s pid
but not all
following is my placeorder function
public function placeOrder(Request $request){
$sessionUser=Session::get('userS'); // user's name,email are stored in sessionarray called 'userS'
$sessionEmail=$sessionUser['email']; // i am accessing email of session user
$getUid=customerModel::where('email',$sessionEmail)->count();
// counting userid(uid) from table which should be only one unique in table
if($getUid==1){
$uid=customerModel::where('email',$sessionEmail)->value('uid');
// here i am getting uid of that user
// here i am requesting value of form field
$name=$request->name;
$email=$request->email;
$address=$request->address;
$order=new orderModel;
$sessionCart=Session::get('cartS');
if($sessionCart){
// if $sessioncart is true then following code should run and rest is my garbage code.....
foreach($sessionCart as $key=>$value){
$pid=$value['pid'];
$qnty=$value['qnty'];
}
$order->uid=$uid;
$order->pid=$pid;
$order->quantity=$qnty;
$order->customer_name=$name;
$order->customer_email=$email;
$order->address=$address;
$order->save();
return redirect('checkout');
}
else{
return back();
}
}
else{
return redirect('/');
}
}
i don’t know if i am right or wrong by writing above function but i want to insert record like following
if it is not good approach then kindly suggest one : )
----------------------------------------------------------------------------------------------------
id(auto increment) uid(user's id) pid(product id) qnty(quantity) name email address
----------------------------------------------------------------------------------------------------
1 1 1-2 3-2 xyz test@test.com xyz
here i am trying to insert value of pid and qnty
are using implode/explode
honestly i’ve never tried implode/explode
or
----------------------------------------------------------------------------------------------------
id(auto increment) uid(user's id) pid(product id) qnty(quantity) name email address
----------------------------------------------------------------------------------------------------
1 1 1 3 xyz test@test.com xyz
1 1 2 2 xyz test@test.com xyz
please give your suggestions-answers whatever etc : )
Advertisement
Answer
If there are 2 products in your cart, (i think) you must have 2 records in order table, also you need to add one more column to group orders, for example order_tag which will contain unique string Second way is to divide orders table in two tables
orders(id,user_id,name,email,address, order_status)
order_items(id,order_id,product_id,qnty,price)
Then you can easily find(query) orders detail. Saving products will look like that
if($sessionCart){
// if $sessioncart is true then following code should run and rest is my garbage code.....
$order=new orderModel;
$order->uid=$uid;
$order->customer_name=$name;
$order->customer_email=$email;
$order->address=$address;
$order->save();
foreach($sessionCart as $key=>$value){
$pid=$value['pid'];
$qnty=$value['qnty'];
$orderItem = new OrderItem;
$orderItem->order_id = $order->id;
$orderItem->product_id=$pid;
$orderItem->quantity=$qnty;
$orderItem->save()
}
return redirect('checkout');
}