如何在Laravel中更新JSON键值

时间:2019-01-24 08:11:07

标签: laravel laravel-5.7

我们尝试更新json数据键值。我们将记录存储在

之类的数据库 product_name 列中
  

{“ ar”:“阿拉伯产品”,“ en”:“”}

我们尝试通过以下两种方法来实现这一目标

DB::table('products')
        ->where('id', 1)
        ->update(['productname->en' => 'english product']);

$post = product::find($product_id);
        $post->product_name = [$language => $edittitle];
        $post->save();

我们要更新json en键值。

2 个答案:

答案 0 :(得分:0)

第一件事是在迁移文件中使用正确的类型创建该字段,我们需要的关键字为--- af-ZA: Africain (Afrique du Sud) --- ar-AE: Arabe (U.A.E.) --- ar-BH: Arabe (Bahreïn) --- ar-DZ: Arabe (Algérie) --- ar-EG: Arabe (Egypte) --- ar-IQ: Arabe (Irak) ...

json

然后,当通过在模型本身上使用... $table->json('productname'); ... 属性将其归为cast时,我们需要将该属性归为Eloquent model

$casts

然后我们可以像这样访问和保存该属性的数据:

...
   /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'productname' => 'array'
    ];
...

有关更多详细信息,请查看:https://laravel.com/docs/5.7/eloquent-mutators#attribute-casting

答案 1 :(得分:0)

一种快速简便的解决方案,可一次性更新所有条目:

Product::each(function ($product) {
    $productName = json_decode($product->product_name, true);
    $productName['en'] = 'english product';
    $product->product_name = json_encode($productName);
    $product->save();
});

如果您要更新单个产品,这应该可以:

$product = Product::find($product_id);
$productName = json_decode($product->product_name, true);
$productName['en'] = 'english product';
$product->product_name = json_encode($productName);
$product->save();