Php 如何在laravel中更新深层json数据

Php 如何在laravel中更新深层json数据,php,json,laravel,Php,Json,Laravel,我需要更新json列中的数据 代码 数据库屏幕截图 数据库数据购物车数据列 "{ \"name\":\"Option Product\", \"productId\":21, \"price\":\"370000\", \"quantity\":2, ------> trying to update this

我需要更新json列中的数据

代码 数据库屏幕截图

数据库数据
购物车数据

"{
    \"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
是一个字符串,这里有些奇怪。如果它被强制转换为数组,则不需要对其进行解码