Laravel / Vue-传递数据:Json将值嵌套为字符串

时间:2019-07-08 11:12:36

标签: php json laravel vue.js

我想将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 个答案:

答案 0 :(得分:1)

不需要手动序列化属性的JSON。相反,您可以使用Eloquent的$casts属性来定义将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);
}