在会话中添加子对象 Laravel

Add Child Object in Session Laravel

我正在使用 Laravel 5.4。

我正在创建一个非常基本的商店应用程序。由此,您可以 select 产品,将它们添加到购物车,然后继续购物或结帐。

我有一个名为 "Order Setup" 的阶段,登录用户定义某些参数,然后将其存储到与对象 order 的会话中。例如:

$order = new Order();
  $order->company_id = $data['company_id'];
  $order->customer_id = $data['customer_id'];
  $order->delivery_address_id = $data['delivery_address_id'];
  $order->total_cost = 0.0;
  $order->limit_remaining = $limitRemaining;
  $order->delivery_cost = $customer->delivery_cost;
  $order->minShipDate = $customer->minDespatchDate();
   $order->deliveryOptions = DeliveryOptions::where('deleted', 0)->pluck('name', 'id');

$request->session()->put('order', $order);

稍后,当用户将项目添加到上面的 "order" 对象时,我想创建上面父对象 "order" 的子对象。例如构建下面的对象,但是在保持关系的同时将其附加到会话中的最佳方法是什么?

$orderDetail = new OrderDetail();
    $orderDetail->stock_code = $orderItem['stock_code'];
    $orderDetail->quantity = floatval($orderItem['quantity']);
    $orderDetail->cost = floatval($productSetup->price);
    $orderDetail->line_price = $productSetup->price * $orderItem['quantity'];

正如@JoséA.Zapata 在评论中所说,您不需要显式关系,您只需为 $orderDetail 创建另一个会话变量并在其中存储订单详细信息数组。您还需要一个额外的会话变量来存储数组中对象的索引。

$orderDetailsArray= array();
 $index=0;
//Now store the $orderDetail object in the array.
$orderDetailsArray[index]=$orderDetail; //order detailDetail object which you have created

//Initiliaze Sessions for orderdetails and index
Session::put('orderDetails',$orderDetailsArray);
Session::put('index',$index);

现在,当您存储下一个 orderDetail 对象时,首先您必须检索 orderDetails 会话并将新的 orderdetail 放入其中。

//increment the old index
$newIndex=Session::get('index');
$newIndex++;
$orderDetailsArray=Session::get('orderDetails');

$orderDetailsArray[$newIndex]=$newOrderDetailObject;

我希望这个方法能帮助你实现你想要的。