在laravel 5中更新序列化数据

时间:2018-01-10 08:41:07

标签: php laravel serialization

我有orders表,其中我的列名为cart,该列中的数据是从我的购物车序列化的。

现在我尝试为管理员创建订单编辑功能,他们可以编辑订单,到目前为止,我可以从序列化数据中获取quantity等数据。

我的问题是如何在我的quantity列中编辑该数据(在本例中为cart)而不会弄乱其中的其他数据?

这是我的更新功能(仍然没有关于数量):

public function update(Request $request, $id)
    {
        $order = Order::find($id);
        $this->validate($request, array(
            'payment_id'=>'nullable',
            'orderstatus_id' => 'required|numeric',
            'address_id' => 'required|numeric',
        ));

        $order = Order::where('id',$id)->first();
        $order->payment_id = $request->input('payment_id');
        $order->orderstatus_id = $request->input('orderstatus_id');
        $order->address_id = $request->input('address_id');

        $order->save();

        return redirect()->route('orders.index',
            $order->id)->with('success',
            'Order updated successfully.');
    }

以下是我在order.edit页面中显示订单数量的方式:

function

public function edit($id)
    {
        $order = Order::find($id);
        $order->cart = unserialize($order->cart);
        $statuses = Orderstatus::all();
        $addresses = Address::where('user_id', $order->user_id)->get();
        return view('admin.orders.edit', compact('order', 'statuses', 'addresses'));
    }

blade

<div class="row mt-20">
   @foreach($order->cart as $item)
     <div class="col-md-4">
        {{ Form::label('quantity', 'Quantity') }}
        {{ Form::text('quantity', $item['quantity'], array('class' => 'form-control')) }}
     </div><!--end col-md-4-->
   @endforeach
</div><!--end row-->

感谢。

更新

我的序列化代码示例

O:32:"Darryldecode\Cart\CartCollection":1:{s:8:"�*�items";a:1:{i:29;O:32:"Darryldecode\Cart\ItemCollection":2:{s:9:"�*�config";a:4:{s:14:"format_numbers";b:0;s:8:"decimals";i:0;s:9:"dec_point";s:1:".";s:13:"thousands_sep";s:1:",";}s:8:"�*�items";a:6:{s:2:"id";i:29;s:4:"name";s:6:"effewf";s:5:"price";d:24524;s:8:"quantity";i:3;s:10:"attributes";O:41:"Darryldecode\Cart\ItemAttributeCollection":1:{s:8:"�*�items";a:0:{}}s:10:"conditions";a:0:{}}}}}

1 个答案:

答案 0 :(得分:0)

您可以将数据保存为JSON并使用$casts属性将Laravel从JSON转换为cart数据到数组并自动返回:

protected $casts = [
    'cart' => 'array',
];

因此,您将能够像使用数组一样使用$order->cart

  

定义了强制转换后,您可以访问该属性,它将自动从JSON反序列化为PHP数组。设置属性的值时,给定的数组将自动序列化为JSON以进行存储

https://laravel.com/docs/5.5/eloquent-mutators#array-and-json-casting