从 laravel 6 中的会话数组插入数据

insert data from session array in laravel 6

i want to insert a record of form fields in table and also values from session array

我有一个包含以下字段的表单

name,email,address

我有这样的会话数组'cartS'

"cartS": [
  {
    "pid": "1",
    "qnty": "3"
  },
  {
    "pid": "2",
    "qnty": "2"
  }
],

所以我有一个 table,其中包含以下字段

---------------------------------------------------------------------------------------------
id(auto increment)  uid(user's id)   pid(product id)   qnty(quantity)   name   email   address
---------------------------------------------------------------------------------------------

这里我有model叫订单模型

我有一个 controller 其中有 public function placeorder(Request $request)

我可以使用 $request

从表单字段中获取值

但是会话数组(关联数组)

中的pidqnty呢?

如果我做 foreach 循环那么它只给出一个键的值但我在会话数组中有 2 个键

$sessionCart=Session::get('cartS');

foreach($sessionCart as $key=>$value){
    $pid=$value['pid'];
    $qnty=$value['qnty'];
}  

if i return $pid 那么它只给出第一个键的 pid 而不是全部

以下是我的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('/');
        }
        
    }

我不知道我写上面的函数是对还是错,但我想插入如下记录

如果这不是一个好的方法,请推荐一个:)

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

我在这里尝试插入 value of pid and qnty are using implode/explode

老实说我从来没有尝试过implode/explode

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

请给出您的建议-答案等等:)

如果您的购物车中有 2 件商品,(我认为)您必须有 2 条订单记录 table,您还需要再添加一列来对订单进行分组,例如 order_tag它将包含唯一的字符串 第二种方法是将订单 table 分成两个 tables

orders(id,user_id,name,email,address, order_status)
order_items(id,order_id,product_id,qnty,price)

然后您就可以轻松找到(查询)订单详情。保存产品看起来像这样

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