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

Posted

技术标签:

【中文标题】如何使用 laravel 或仅使用本机 php 更新来自 mysql 数据库的 JSON 数据?【英文标题】:How to update a JSON data that came from a mysql database using laravel or just a native php? 【发布时间】:2020-01-31 11:51:30 【问题描述】:

我有一个长文本类型的数据库表,因为我将结构更改为 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
    
 

【问题讨论】:

【参考方案1】:

试试这个,对我有用!

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

【讨论】:

我需要动态更新它。我不知道为什么我不能这样做。我的代码有问题吗? 我可以知道你对我的回答有什么不同吗?【参考方案2】:

您可以尝试使用 laravel 文档中的属性转换:

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

只需使用您的列名将 casts 数组添加到您的模型中:

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

稍后当您准备好更新其值时:

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

【讨论】:

我没有使用我的模型进行查询。我使用 DB 类在数据库中进行查询。没事吧? 这仅适用于 eloquent 模型,只需将您的查询生成器与模型切换,我可以看到您已经有了 Product 模型 好的,我试试谢谢。如果我能让它运行,我稍后会在这里发表评论。

以上是关于如何使用 laravel 或仅使用本机 php 更新来自 mysql 数据库的 JSON 数据?的主要内容,如果未能解决你的问题,请参考以下文章

将php代码实现为html或仅使用php会更快吗?查看更多详情

如何配置 Laravel mail.php 以使用内置邮件功能?

我如何从 laravel api 推送通知以响应本机应用程序?

如何使用 Laravel8 中的 Twig 扩展注入 php GraphQL 查询结果,在 Twig(Bridge) 模板中定义查询?

在多版本php环境,指定composer使用的php版本

如何使用 Laravel 高效地制作网页和移动游戏