gpt4 book ai didi

php - json类型字段的Laravel数据库在返回值时添加“

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:44:00 24 4
gpt4 key购买 nike

我已经阅读了 Laravel 5 文档,我看到它支持数据库中的 json 类型字段,但我注意到了非常奇怪的行为。

这是我的 table :

Schema::create('subjects', function ($table) {
$table->increments('id');
$table->string('name', 100);
$table->integer('ects');

$table->json('studies'); // this is my json type field

$table->date('created_at');
$table->date('updated_at');
});

然后我为数据库播种:

Subject::create(['name' => 'Programming 1', 
'ects' => '0',
'studies' => '{"program":"Computer Science","year":"1"}']);

服务器响应看起来像这样:

{
"id": 15,
"name": "Programming 1",
"brEcts": 0,
"studies": "{\"program\":\"Computer Science\",\"year\":\"1\"}",
"created_at": "2015-12-05 00:00:00",
"updated_at": "2015-12-05 00:00:00",
"pivot": {
"profesor_id": 20,
"subject_id": 15
}
}

注意 response field studies 中的\",laravel 为我生成的 "pivot"字段结构正确,也是 json 类型的字段。

当我查看 phpMyAdmin 时,studies 字段的值看起来很正常。 (没有\")

我的服务器响应代码:

$subjects = Profesor::find($id)->subjets()->get();
return response()->json($subjects);

我是否正确地为数据库设置了种子,或者问题出在我在服务器上返回值时?

我知道我可以在客户端删除符号“\”来解决这个问题,但这是我最后的选择,因为它不够干净。

编辑:

我通过在我的模型类中添加一个数组转换来解决它:

protected $casts = [
'name' => 'string',
'ects' => 'integer',
'studies' => 'array'
];

文档可以看here

最佳答案

看起来您正在对整个 eloquent 集合 进行 json 编码,当您使用 get() 方法 (http://laravel.com/docs/5.1/eloquent-collections) 时会返回该集合。

来自 laravel 文档:

The json method will automatically set the Content-Type header to application/json, as well as convert the given array into JSON using the json_encode PHP function:

从本质上讲,您正在使用 json_encode() 将整个集合转换为 json,这将假定您的 json 字段是一个字符串,因此已将其转义。

关于php - json类型字段的Laravel数据库在返回值时添加“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34106804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com