【发布时间】:2019-11-01 03:33:26
【问题描述】:
我的数据库中有一个用于保存用户设置的列。这是数据结构的样子:
{"email":{"subscriptions":"{\"Foo\":true,\"Bar\":false}"}}
我正在使用 vue 切换来更改每个属性的状态(真/假)。一切似乎都在工作,但是当我保存时,我正在清除结构并保存更新的值,如下所示:
{\"Foo\":true,\"Bar\":false}"}
php
$user = auth()->user();
$array = json_decode($user->preferences['email']['subscriptions'], true);
dd($array);
以上让我明白了:
array:2 [
"Foo" => true
"Bar" => false
]
到目前为止一切都很好......
$preferences = array_merge($array, $request->all());
dd($preferences);
得到我:
array:2 [
"Foo" => true
"Bar" => true
]
太棒了 - 这些值现在正在获取从 axios 请求传入的值。接下来;更新用户数据:
$user->update(compact('preferences'));
现在我的数据如下所示:
{"Foo":true,"Bar":true}
值不再嵌套;我已经消灭了email 和subscriptions。
我试过了:
$user->update([$user->preferences['email']['subscriptions'] => json_encode($preferences)]);
但它似乎没有保存数据。如何使用 $preferences 变量更新数据 - 并保持数据正确嵌套?
【问题讨论】:
-
尝试编码整个结构,类似这样,如果首选项是列名
$user->update([ 'preferences' => json_encode([ 'email' => [ 'subscriptions' => $preferences ]) ] ]); -
就是这样!我非常专注于尝试保持现有格式。我现在遇到了其他错误,但这是我需要解决的问题。非常感谢你!将您的评论标记为答案;我会确保发布它。