Laravel 将 JSON 转换为数组?

问题描述 投票:0回答:3

我正在尝试将 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\"}}",

有什么想法吗?

php json laravel laravel-5 eloquent
3个回答
21
投票

当您定义强制转换以键入

array
时,您不需要执行任何
json_encode
json_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'];

19
投票

如果你想让自己大吃一惊......

// 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
投票

只需将

json_decode
option array true

一起使用
json_decode($casts['content'], true));
© www.soinside.com 2019 - 2024. All rights reserved.