将JSON转换为数组的Laravel类型转换?

19

我试图将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\"}}",

有什么想法吗?


RTM: json_encodejson_decode。此外,当你设置 'key' => 'value' 时,你已经拥有了一个数组。你想要实现什么?xD - FirstOne
我正在从模型中转换元素,这样当控制器返回JSON时,它看起来像一个JSON对象而不是一个字符串。这样很容易操作和使用 :) - Jorge Y. C. Rodriguez
3个回答

21

当你定义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 中一样放置了一个数组,但在填充时它抛出了一个错误,但看起来我需要更好地阅读错误信息... 谢谢伙计 :) - Jorge Y. C. Rodriguez

17

如果你希望心灵受到震撼……

// automatically handles json_encode, json_decode to php object
protected $casts = [
    'db_json_column' => 'object'
];

$model->db_json_column = $array; // persisted as json
$object = $model->db_json_column; // retrieved as object

或者,
// automatically handles json_encode, json_decode to php array
protected $casts = [
    'db_json_column' => 'array'
];

$model->db_json_column = $array; // persisted as json
$array = $model->db_json_column; // retrieved as array

2
只需使用带有选项数组true的json_decode即可。
json_decode($casts['content'], true));

当数据通过关联获取并使用$data->content;来获取模型的一部分时,您将如何实现它? - Jorge Y. C. Rodriguez
你可以尝试使用 $data->toArray()。 - zt1983811

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接