Добавить дочерний объект в сессию Laravel - PullRequest
0 голосов
/ 08 ноября 2018

Я использую Laravel 5.4.

Я создаю очень простое приложение для магазина. Таким образом, вы можете выбрать товары, добавить их в корзину и продолжить покупки или оформить заказ.

У меня есть этап под названием «Настройка заказа», в котором вошедшие в систему пользователи определяют определенные параметры, затем он сохраняется в сеансе с объектом order. e.g.:

$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);

Позже, когда пользователь добавляет элемент к объекту «заказ» выше, я хочу создать дочерний объект родительского «заказ» выше. например построения объекта ниже, но каков наилучший способ добавить это в сеанс, сохраняя при этом отношения?

$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'];

1 Ответ

0 голосов
/ 08 ноября 2018

Как сказал @ 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;

Надеюсь, этот метод поможет добиться того, чего вы хотите.

...