Laravel / Vue - передача данных: вложенные значения Json в виде строки - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь передать объект JSON из моего бэкэнда Laravel в мой веб-интерфейс Vue, но одно из вложенных свойств возвращается как строка, а не как объект. Рассматриваемый объект user.options, как показано ниже.

Объект user.options хорошо отформатирован, но когда я отправляю ответ, он обрабатывается как строка. Я могу преобразовать строку в JSON во внешнем интерфейсе, но это не идеально.

JSON code snippet of user object with malformed options property

public function update(Request $request)
{
    $user = $this->user;
    $user->options = json_encode([
        'cart' => $request->only('product_id', 'code', 'product_slug', 'pic_url', 'request')
    ]);
    $user->save();

    return response()->json($user);
}

1 Ответ

1 голос
/ 08 июля 2019

Нет необходимости сериализовать JSON свойства вручную. Вместо этого вы можете использовать свойство $casts Eloquent, чтобы определить, что ваш options должен рассматриваться как объект:

class User
{
    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'options' => 'object',
    ];
}

Затем вы можете назначить массивы и объекты этому свойству. Eloquent будет хранить его как JSON в фоновом режиме. При извлечении свойства Eloquent снова преобразует его в объект:

public function update(Request $request) {
    $user = $this->user;
    $user->options = [
        'cart' =>  $request->only('product_id', 'code', 'product_slug', 'pic_url', 'request')
    ];
    $user->save();

    return response()->json($user);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...