gpt4 book ai didi

json - Laravel:更新嵌套的 json 对象

转载 作者:行者123 更新时间:2023-12-05 03:57:19 26 4
gpt4 key购买 nike

我的数据库中有一列用于保存用户的设置。这是数据结构的样子:

{"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}

值不再嵌套;我已经删除了 emailsubscriptions

我已经试过了:

$user->update([$user->preferences['email']['subscriptions'] => json_encode($preferences)]);

但是好像没有保存数据。我如何使用 $preferences 变量来更新数据 - 并保持数据正确嵌套?

最佳答案

您可以使用您希望生成的 json 具有的结构创建一个数组。所以,对于这个 json:

{
"email":{
"subscriptions":{
"Foo":true,
"Bar":false
}
}
}

你可以像这样创建一个数组:

[
'email' => [
'subscriptions' => [
'Foo' => true,
'Bar' => false
]
]
]

然后,对整个结构进行编码:

json_encode([ 
'email' => [
'subscriptions' => [
'Foo' => true,
'Bar' => false
]
]
]);

因此,在您的代码中,因为 $preferences 变量中已经有嵌套数组,所以我认为这应该可行:

$json_preferences = json_encode([ 
'email' => [
'subscriptions' => $preferences
]
]);

然后您可以更新用户的“首选项”属性(仅作为示例):

User::where('id', auth()->user()->id)->update(['preferences' => $json_preferences]);

$user = auth()->user();
$user->preferences = $json_preferences;
$user->save();

关于json - Laravel:更新嵌套的 json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58653778/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com