我想将JSON对象从Laravel后端传递到Vue前端,但是其中一个嵌套属性将作为字符串而不是对象返回。所讨论的对象是user.options
,如下所示。
user.options
对象的格式正确,但是当我发送响应时,它被视为字符串。我可以在前端将字符串转换为JSON,但这并不理想。
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);
}
答案 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);
}