我们尝试更新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键值。
答案 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();