php - laravel 中如何优雅地自定义集合键名
问题描述
- 比如有这样一个集合
$phone_Id = $request->get('q');
$colors = Phone::find($phone_Id)->color->toArray();
dd($colors);
- 打印结果
array:2 [▼
0 => array:6 [▼
"id" => 8
"name" => "red"
"value" => "#fb6250"
"created_at" => "2019-05-29 01:42:51"
"updated_at" => "2019-05-29 01:42:51"
"pivot" => array:4 [▼
"phone_id" => 1
"color_id" => 8
"created_at" => "2019-05-29 01:42:51"
"updated_at" => "2019-05-29 01:42:51"
]
]
1 => array:6 [▼
"id" => 11
"name" => "blue"
"value" => "#202020"
"created_at" => "2019-05-29 01:42:51"
"updated_at" => "2019-05-29 01:42:51"
"pivot" => array:4 [▼
"phone_id" => 1
"color_id" => 11
"created_at" => "2019-05-29 01:42:51"
"updated_at" => "2019-05-29 01:42:51"
]
]
]
- 我想要的最终结果是这样的数组
array:2 [▼
0 => array:2 [▼
"id" => 8
"text" => "red"
]
1 => array:2 [▼
"id" => 11
"text" => "blue"
]
]
- 所以我现在的做法是这样的。
$data = [];
foreach ($colors as $key => $val) {
$data[$key]['id'] = $val->id;
$data[$key]['text'] = $val->name;
}
dd($data);
- 打印结果
array:2 [▼
0 => array:2 [▼
"id" => 8
"text" => "red"
]
1 => array:2 [▼
"id" => 11
"text" => "blue"
]
]
我想知道在laravel中对于这种需求是否有更好更漂亮的实现?
解决方案
$colors = Phone::find($phone_Id)->color;
$colors->transform(function ($color) {
return [
'id' => $color->id,
'text' => $color->name,
];
});
编辑:感谢您的正确答案和赞成票,但我想指出,OP 使用查询生成器->get(..)
和重命名列来提供更优雅的解决方案:
$colors = Phone::find($phone_Id)->color()->get(['id', 'name as text'])->toArray();
推荐阅读
- excel - VBA - 通过 VBA 将数据分配给折线图得到 1004
- google-cast - 加载 chromecast 应用接收器时打开电视
- c++ - 需要时在单个 QQuickwidget 上交替显示 2 个 QML 文件,而不会重叠
- swift - 为什么这个功能在我添加命中框后立即停止工作?
- javascript - 使用复选框 JavaScript 进行多条件过滤
- python - 错误 - 使用 BeautifulSoup4 解析网页时
- loops - Racket expt 是否使用尾递归?
- javascript - 如何在IE11中获取地图的第一个键和值
- eclipse - Eclipse 插件开发:存储为 UTF8 的德语变音符号在 SWT 控件中显示错误,但在字符串常量中正确
- javascript - 如何从 Json 访问特定字段