【问题标题】:Laravel: Update a nested json objectLaravel:更新嵌套的 json 对象
【发布时间】: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}

值不再嵌套;我已经消灭了emailsubscriptions

我试过了:

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

但它似乎没有保存数据。如何使用 $preferences 变量更新数据 - 并保持数据正确嵌套?

【问题讨论】:

  • 尝试编码整个结构,类似这样,如果首选项是列名$user->update([ 'preferences' => json_encode([ 'email' => [ 'subscriptions' => $preferences ]) ] ]);
  • 就是这样!我非常专注于尝试保持现有格式。我现在遇到了其他错误,但这是我需要解决的问题。非常感谢你!将您的评论标记为答案;我会确保发布它。

标签: json laravel laravel-6


【解决方案1】:

您可以使用您希望生成的 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();

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多