【发布时间】:2021-01-10 18:56:10
【问题描述】:
我需要使用 Laravel Eloquent 更新 JSON 的一些嵌套值,但没有得到我想要的优化结果。下面的json需要经常更新。我对此有一个可行的解决方案,但需要对解决方案进行微调。
{
"a": {
"b": 12,
"c": 792,
"d": 45,
"e": {
"1": {
"name": "Guna",
"city": "city1",
"dob": 2000
},
"2": {
"name": "Raj",
"city": "city2",
"dob": 2001
},
"3": {
"name": "Dhamu",
"city": "city3",
"dob": 1985
},
"4": {
"name": "Bhavi",
"city": "city5",
"dob": 1985
}
}
}
}
尝试过的代码
$c_array=Json::decode($this->company->details, 1);
$c_array['a']['Player'][$p[0]]['st']=$p[1];
$c_array['a']['e'][1]['name'] = 'Bheem';
$c_array['a']['e'][1]['city'] = 'City10';
$c_array['a']['e'][2]['name'] = 'Dhanu';
$c_array['a']['e'][2]['city'] = 'City5';
$this->company()->update(['details' => Json::encode($c_array)]);
上面的代码工作正常,但是在检查查询时整个 json 都会更新。我只需要更新需要更新的单个键。
我们可以使用 Query Builder (DB::raw) 更新代码,如下所示,
update ultimate_squad set squad=JSON_SET(details,'$.a.e."1".name','Bheem','$.a.e."1".city','City10','$.a.e."2".name','Dhanu','$.a.e."2".city','City5') where c_id=1;
【问题讨论】:
-
我在 Stack Overflow 上看到的关于在 MySQL 中使用 JSON 的每一个问题都可以得到回答,“如果你不使用 JSON,这将更容易和更有效。”
-
@BillKarwin 我有上述更新 JSON 值的解决方案,但需要微调
-
是的,我明白了。你已经写了上面几乎相同的词。
-
通过在 JSON 中实现复杂的数据模型而不是普通的行和列,您正在创建一个 Inner-Platform Effect:创建“一个可定制的系统,以成为一个副本,通常是一个糟糕的副本,他们正在使用的软件开发平台。”如果您希望它更精细,那么您必须做的第一件事就是停止使用 JSON。而是使用普通的行和列。
-
您可能会说,“但它必须灵活。”好吧,你不能让它如此灵活和同时优化。
标签: php mysql laravel eloquent mysql-json