Php 如何在laravel中更新深层json数据
我需要更新json列中的数据 代码 数据库屏幕截图 数据库数据Php 如何在laravel中更新深层json数据,php,json,laravel,Php,Json,Laravel,我需要更新json列中的数据 代码 数据库屏幕截图 数据库数据购物车数据列 "{ \"name\":\"Option Product\", \"productId\":21, \"price\":\"370000\", \"quantity\":2, ------> trying to update this
购物车数据
列
"{
\"name\":\"Option Product\",
\"productId\":21,
\"price\":\"370000\",
\"quantity\":2, ------> trying to update this value
\"attributes\":{
\"attr\":{
\"name\":\"weight\",
\"value\":\"2\"
}
},
\"conditions\":[
{
\"name\":\"Colors\",
\"value\":0
}
]
}"
有什么想法吗?您可以直接在查询生成器中进行查询,而无需首先检索,如下所示:
// Assuming pk on cart_storages is id
DB::table('cart_storages')
->where('id', $request->input('id'))
->update([
'cart_data->quantity' => $qty,
]);
声明文档声明“MySQL 5.7+和PostgreSQL 9.5+支持此操作”非常重要。您可以直接在查询生成器中执行此操作,而无需先检索它,如下所示:
// Assuming pk on cart_storages is id
DB::table('cart_storages')
->where('id', $request->input('id'))
->update([
'cart_data->quantity' => $qty,
]);
声明文档声明“MySQL 5.7+和PostgreSQL 9.5+支持此操作”非常重要。来自@Kurt Friars的回答很好。如果出于某种原因需要提取CartStorage模型并对其执行其他操作,则可以如下方式更新cart_数据:
$item = CartStorage::findOrFail($request->input('id'));
// Do whatever else you need
$cartData = $item->cart_data;
$cartData['quantity'] = 4;
$item->update([
'cart_data' => $cartData
]);
“库尔特修士”的回答很好。如果出于某种原因需要提取CartStorage模型并对其执行其他操作,则可以如下方式更新cart_数据:
$item = CartStorage::findOrFail($request->input('id'));
// Do whatever else you need
$cartData = $item->cart_data;
$cartData['quantity'] = 4;
$item->update([
'cart_data' => $cartData
]);
这个答案可能对您有用:基本上,您需要获取cart_数据的现有值并更新它,然后在保存之前将其设置回对象。@音乐我根据答案在那里做的事情,现在它清除了我的数据库。我的
card_data
列只有{“quantity”:4}
:/确保您正在获取并更新购物车数据,而不仅仅是将其设置为['quantity'=>4]
@music您介意分享一个答案吗?这个答案可能对您很有用:基本上,您需要获取购物车数据的现有值并进行更新,然后在保存之前将其设置回对象上。@music我根据那里的答案所做的事情,现在它清除了我的数据库。我的卡片数据
列只有{“数量”:4}
::确保获得$item->cart\u数据
并更新它,而不仅仅是将其设置为['quantity'=>4]
@music您介意分享一个答案吗?这个->where('id',$request->input('id')
应该是->其中('id',$request->input('id'))
,而且我不确定在列名中使用->
是否有效购物车数据->数量
在您拥有的更新部分'cart\u数据->数量=>$qty,
,cart\u data->quantity
永远不会在cart\u data
列中获取quantity
变量,谢谢。修正了分号,什么问题,购物车数据->数量?您使用的是什么数据库/版本?根据我链接到的laravel文档,这是用于在json列中指定嵌套数据的语法。不,它返回data:0
,而它应该是data:{item}
,在数据库中它不会得到更新此->where('id',$request->input('id')
应该是->其中('id',$request->input('id'))
,而且我不确定在列名中使用->
是否有效购物车数据->数量
在您拥有的更新部分'cart\u数据->数量=>$qty,
,cart\u data->quantity
永远不会在cart\u data
列中获取quantity
变量,谢谢。修正了分号,什么问题,购物车数据->数量?您使用的是什么数据库/版本?根据我链接到的laravel文档,这是在json列中指定嵌套数据的语法。否它返回data:0
,而它应该是data:{item}
而且在数据库中它没有得到更新。我得到了非法的字符串偏移量“数量”我对您的存储模型了解得不够。我希望将cart\u数据
转换为集合或数组。数据类型是什么?它是JSON字符串吗?protected$casts=['cart_data'=>'array',]
关于数据类型我共享了数据库数据我不明白为什么'quantity'
是非法的字符串偏移量。这种行为似乎表明,cart\u data
是一个字符串,这里有些奇怪。如果它被强制转换为数组,则不需要对其进行解码。获取非法字符串偏移量'quantity'我不太了解您的存储模型。我希望将cart\u数据
转换为集合或数组。数据类型是什么?它是JSON字符串吗?protected$casts=['cart_data'=>'array',]
关于数据类型我共享了数据库数据我不明白为什么'quantity'
是非法的字符串偏移量。这种行为似乎表明,cart\u data
是一个字符串,这里有些奇怪。如果它被强制转换为数组,则不需要对其进行解码