2015-12-27 48 views
4

我想将一个JSON字段转换为数组。例如该模型是这样的:Laravel将JSON转换为数组?

protected $casts = [ 
    'content' => 'array' 
]; 

而在插入里面的内容,我不喜欢这样写道:

'content'=> json_encode([ 
       'description' => $faker->paragraph(3), 
       'about' => $faker->paragraph(2), 
       'info' => $faker->paragraph(2), 
       'updated' => $faker->dateTimeBetween('-1 years', 'now') 
]), 

但在获取数据它打印一个字符串,没有别的。

这一部分的迁移是这样的:输出

$campaign->json('content'); 

样品:

"content": "{\"description\":\"Ut quas quo odio illo. Voluptates quia fuga itaque sint. Velit sapiente fugit ea ut ducimus sint tempora eligendi. Ea et molestiae consequuntur quibusdam soluta voluptatem.\",\"about\":\"Aut voluptates et iste ut perspiciatis. Esse sunt ullam inventore sit doloremque et quisquam.\",\"info\":\"Corrupti et facere exercitationem consequatur aspernatur quo saepe. Omnis et tempore enim ut. Quia magnam quia enim et eos enim.\",\"updated\":{\"date\":\"2015-11-22 08:25:13.000000\",\"timezone_type\":3,\"timezone\":\"UTC\"}}", 

任何想法,为什么?

+0

RTM: [json_encode](http://php.net/manual/en/function.json-encode.php)和[json_decode](http://php.net/manual/en/function.json-decode.php)。另外,当你设置''key'=>'value''时,你已经有了一个数组。你想达到什么目的? xD_ – FirstOne

+0

我正在从模型中转换元素,所以当控制器返回JSON时,它看起来像一个JSON对象,而不是一个字符串。这种方式很容易操作和使用:) – jycr753

回答

5

当你定义array投你不需要做任何json_encodejson_decode。当你要插入,简单,你需要做的:

'content'=> [ 
    'description' => $faker->paragraph(3), 
    'about' => $faker->paragraph(2), 
    'info' => $faker->paragraph(2), 
    'updated' => $faker->dateTimeBetween('-1 years', 'now') 
], 

Laravel将完成剩下的

而当你想获得content现场数据,你的简单需要使用:

$campaign->content; 

,你会在这里阵列,所以如果你想显示说明,你只需要做:

echo $campaign->content['description']; 
+1

谢谢你是这样的。我完全迷失了,因为我之前在laravel 4中放置了一个数组,但它在播种时抛出一个错误,但看起来像我需要更好地阅读错误...感谢队友:) – jycr753

3

只要使用json_decodeoption array true

json_decode($casts['content'], true)); 
+0

当数据通过关系和'$ data-> content;'获取模型的那部分时,你将如何实现? – jycr753

+0

你可以尝试$ data-> toArray() – zt1983811