2017-06-20 154 views
0

嗨,下面是我存储在我的数据库中,但是当我在我的模型中使用我的get方法时,我必须在格式化数据时使用两次json_decode为什么发生这种情况,我可以拥有它吗?只是以某种方式使用它。Laravel模型获取方法解码JSON

JSON正是在DB:

"[{\"id\":\"1\",\"country\":\"New Zealand\",\"shipping_rate\":\"1\"},{\"id\":\"2\",\"country\":\"Australia\",\"shipping_rate\":\"2\"}]" 

模型中获取方法:

public function getshippingAttribute() 
{ 
    return $this->attributes['shipping'] ? json_decode(json_decode($this->attributes['shipping'])) : []; 
} 

回答

-1

尝试返回JSON响应

public function getshippingAttribute() 
{ 
    return response()->json($this->attributes['shipping']) 
} 
+0

如果我这样做,我得到一个空的对象,只包含ajax调用的标题属性,所以这个选项将无法正常工作,因为我没有在那里进行数据库调用,我格式化文档中的字段 – ONYX

+0

的输出他们说: json方法会自动将Content-Type头设置为application/json,并使用json_encode PHP函数将给定数组转换为JSON: – MrCharif

+0

也许变量为null – MrCharif

1

的问题是不是从你的问题,但Laravel足够清晰为属性投射提供内建机制(自v-5.1)。在这种情况下,在你的模型,只是声明$casts属性,例如:

protected $casts = [ 
    'shipping' => 'array', 
    // more ... 
]; 

由于上面给出的$casts属性,只要你会写(创建/更新)的模型,你不需要明确使用json_encode将数组转换为json字符串,Laravel将为您执行此操作,并且当您检索模型(单个/集合)时,shipping属性将自动转换回array,因此您不需要使用json_decode来处理该属性。

关于响应,如果您没有手动将其转换为json(当返回model/collection时),也将由laravel处理。这可能会解决你的问题。