我已经删除了Laravel 5文档,我已经看到它支持数据库中的json类型字段,但我注意到了非常奇怪的行为。
这是我的表:
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
}
}
注意\“在响应字段研究中,laravel为我生成的”pivot“字段是正确构造的,也是json类型字段。
当我查看phpMyAdmin时,研究领域的价值看起来很正常。 (没有\“)
我的响应服务器代码:
$subjects = Profesor::find($id)->subjets()->get();
return response()->json($subjects);
我是否正确播种了数据库,或者问题是我在服务器上返回值?
我知道我可以在客户端解决这个问题,删除符号“\”但这是我的最后一个选项,因为它不够干净。
编辑:
我通过在我的Model类中添加数组转换来解决它:
protected $casts = [
'name' => 'string',
'ects' => 'integer',
'studies' => 'array'
];
可以看到文档here
答案 0 :(得分:2)
看起来你是json编码整个eloquent collection
,当你使用get()
方法(http://laravel.com/docs/5.1/eloquent-collections)时会返回该json_encode()
。
来自laravel docs:
json方法会自动将Content-Type标头设置为application / json,,并使用json_encode PHP函数将给定数组转换为JSON :
基本上,您使用json
将整个集合转换为json,假设您的<script>
var data = ["foo","bar"];
$(function () {
$("#searchField").autocomplete({
source: data,
minLength: 2,
select: function (event, ui) {
console.log("selected: " + ui.item.label);
clearSearchField();
}
});
});
function clearSearchField() {
document.getElementById('searchField').value = '';
}
</script>
<input type="text" id="searchField" name="name" placeholder="Search"/>
字段是一个字符串,因此已将其转义。