Laravel集合格式转换求助:适配Angular的API数据结构调整
Laravel Collection 格式转换实现方案
我正在使用Laravel PHP API获取数据并传输至Angular项目,现需对Laravel Collection进行格式调整,请问是否可以实现如下转换?
当前输出
"data": [ { "ID": "1", "JobFamilyID": "1", "JobFamilyCode": "BA", "JobFamilyName": "Business And Administrative Services", "MajorGroupID": "2" }, { "ID": "", "JobFamilyID": "", "JobFamilyCode": "BA", "JobFamilyName": "Business And Administrative Services", "MajorGroupID": "2" } ]
期望输出
[ { "JobFamilyId": "1", "JobFamilyName": "Business And Administrative Services" }, { "JobFamilyId": "2", "JobFamilyName": "Educational Service" } ]
实现方案
完全可以通过Laravel集合的内置方法实现这个转换,步骤如下:
1. 筛选并重命名字段
使用map方法遍历集合,只保留需要的JobFamilyID和JobFamilyName字段,同时将键名JobFamilyID改为JobFamilyId(匹配期望输出的大小写)。
2. 去除重复条目
当前输出存在重复的JobFamilyName记录,使用unique方法根据名称或ID去重,确保最终结果无重复数据。
3. 重新索引集合
用values方法重新整理集合索引,避免出现非连续的键名。
完整代码示例
在Laravel控制器中可以这样写:
// 假设$originalData是从数据库或其他来源获取的原始集合 $formattedData = $originalData->map(function ($item) { return [ 'JobFamilyId' => $item['JobFamilyID'] ?? '', 'JobFamilyName' => $item['JobFamilyName'] ?? '' ]; }) ->unique('JobFamilyName') // 根据JobFamilyName去重,也可改用JobFamilyId ->values(); return response()->json($formattedData);
说明
?? ''用于处理原数据中字段为空的情况,避免出现null值- 如果你的原始数据是从Eloquent模型获取的,可直接用属性访问(如
$item->JobFamilyID)替代数组访问
内容的提问来源于stack exchange,提问作者Rishf P
相关产品推荐
相关产品推荐

