如何使用laravel或本机php更新来自mysql数据库的JSON数据?

如何使用laravel或本机php更新来自mysql数据库的JSON数据?,php,mysql,json,laravel,Php,Mysql,Json,Laravel,我有一个长文本类型的数据库表,因为我将结构更改为JSON,因为我将把JSON数据放在那里,插入就可以了。我的问题是,我想在使用laravel/php检索JSON数据后更新其中的一部分 我用下面的代码试过了,但我很难做到 $qtyy = $orderDetail->quantity; $product = Product::findOrFail($prod_id); $json = json_decode($product->variations, true); forea

我有一个长文本类型的数据库表,因为我将结构更改为JSON,因为我将把JSON数据放在那里,插入就可以了。我的问题是,我想在使用laravel/php检索JSON数据后更新其中的一部分

我用下面的代码试过了,但我很难做到

$qtyy = $orderDetail->quantity;  
$product = Product::findOrFail($prod_id);  
$json = json_decode($product->variations, true);  
foreach ($json as $key => $value) {  
if($key == $orderDetail->variation){  
    $total = (int)$value->qty + (int)$qtyy;  
    DB::table('products')  
        ->where('id', $prod_id)  
        ->update([$value->qty => $total]);  
    }  
}  
我想更改数据库中的“数量”

{ 
   "AliceBlue-Cream":{ 
      "price":"500",
      "sku":"V-AliceBlue-Cream",
      "qty":"1000"
   },
   "Amethyst-Cream":{ 
      "price":"500",
      "sku":"V-Amethyst-Cream",
      "qty":"2998"             <- I want to update that
    }
 }
{
“艾丽赛蓝乳膏”:{
“价格”:“500”,
“sku”:“V-AliceBlue-Cream”,
“数量”:“1000”
},
“紫水晶霜”:{
“价格”:“500”,
“sku”:“V-紫水晶霜”,

“数量”:“2998”试试这个,对我来说很有用

DB::table('products')  
    ->where('id', $prod_id)
    ->update([
         "Amethyst-Cream->qty" => "2998"
      ]);

您可以从laravel文档中尝试属性转换:

如果数据库的JSON或文本字段类型包含 序列化JSON,将数组强制转换添加到该属性将 自动反序列化

只需使用列名将强制转换数组添加到模型中:

protected $casts = [
        'myColumn' => 'array',
    ];
稍后,当您准备更新其值时:

$product = Product::find(1);
$myUpdatedColumn = $product->myColumn;
$myUpdatedColumn['qty'] = 2998;
$product->myColumn = $myUpdatedColumn;
$product->save();

我需要动态地使用它。我不知道为什么我不能这样做。我的代码有什么问题吗?我可以知道你的答案和我的有什么不同吗?我没有使用我的模型来查询。我使用DB类在数据库中查询。可以吗?这只适用于雄辩的模型,只要用模型切换你的查询生成器,我可以看到你已经开始了t产品型号好的,我会试试的,谢谢。如果我能让它运行,我会在这里发表评论。