假设我有三个模型和表格,即学校、班级和学生。 学校和班级是一对多的关系,班级和学生也是一对多的关系。现在我正在创建一个 RESTFUL API,以这种 JSON 格式一次性发送所有这些数据:
[{
"1": {
"school_id": 1,
"school_name": "Havard",
"Class": {
"1": {
"class_id": 1,
"school_id": 1,
"class": "6",
"Student": {
"1": {
"Student_fname": "SomeName",
"Student_lname": "Last Name"
},
"2": {
"Student_fname": "Another",
"Student_lname": "AnotherLast"
}
},
"2": {
"class_id": 2,
"school_id": 28,
"class": "7",
"Student": {
"1": {
"Student_fname": "Anotherone",
"Student_lname": "Last"
},
"2": {
"Student_fname": "New",
"Student_lname": "Newer"
}
}
}
}
}
}
},
{
"2": {
"school_id": 1,
"school_name": "AnotherSchool",
"Class": {
"1": {
"class_id": 1,
"school_id": 1,
"class": "6",
"Student": {
"1": {
"Student_fname": "SomeName",
"Student_lname": "Last Name"
},
"2": {
"Student_fname": "Another",
"Student_lname": "AnotherLast"
}
},
"2": {
"class_id": 2,
"school_id": 28,
"class": "7",
"Student": {
"1": {
"Student_fname": "Anotherone",
"Student_lname": "Last"
},
"2": {
"Student_fname": "New",
"Student_lname": "Newer"
}
}
}
}
}
}
}
]
如何实现这种格式? 我的这个json格式正确吗?有没有更好的方法来实现?
如果像我一样,您想使用
JSON
string
格式化 Laravel
collection
请使用以下技术:
$json = collect([
'name' => 'Test',
'description' => 'Another awesome laravel package',
'license' => 'MIT'
])->toJson(JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
echo $json;
生成的输出将具有以下格式:
{
"name": "Test",
"description": "Another awesome laravel package",
"license": "MIT"
}
相同的技术可以应用于
eloquent
查询的结果。并将 JSON
写入文件到 storage
。
参考链接
您可以使用像 https://github.com/thephpleague/fractal、https://github.com/dingo/api 这样的库,或者通过在控制器中创建转换器方法(如果您愿意,也可以使用类) )
一些伪代码
<?php
class UserController extends Controller
{
public function index(Request $request) {
$users = Users::all();
$response = [];
foreach ($users as $user) {
$response[] = $this->transform($user);
}
}
public function transform(User $user) {
return [
'username' => $user->username,
'age' => $user->age,
'class' => [
'name' => $user->school->name,
'something' => $user->school->something
]
];
}
}
我强烈建议在其他类中而不是在控制器本身中进行变换部分。
对于访问此问题以获取有关 Laravel 中 JSON 格式的解决方案的人们,我建议您使用 Chrome 上的 JSON 格式化程序 扩展来测试您的 API 响应,而不是浪费时间来执行简单的任务。 这只是我个人的建议,无论如何,您都可以创建或使用插件来管理代码上的 JSON 响应。
查看 Laravel API 资源。
我觉得应该是这样的
[
"1": {
"school_id": 1,
"school_name": "Havard",
"Class": [
"1": {
"class_id": 1,
"school_id": 1,
"class": "6",
"Student": [
"1": {
"Student_fname": "SomeName",
"Student_lname": "Last Name"
}
]
}
]
}
]