我有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:{}}}}}
答案 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