我有这样的集合 A...
[
"Gender",
"Name",
"Role",
],
...而且我有一个来自这样的模型实例的 Collection B...
[
App\Models\Staff {
id: 11,
name: "John Doe",
gender: 'Male',
2: "role",
role: App\Models\Role {
id: 1,
name: "Director",
},
},
App\Models\Staff {
id: 22,
name: "Jane Doe",
gender: 'Female',
2: "role",
role: App\Models\Role {
id: 2,
name: "Company Secretary",
},
},
],
我怎样才能将两者结合起来,就像我拥有这样的 Collection C...
[
[
"Gender" => 'Male',
"Name" => 'John Doe',
"Role" => 'Director',
],
[
"Gender" => 'Female',
"Name" => 'Jane Doe',
"Role" => 'Company Secretary',
],
]
到目前为止,我已经尝试了一些方法,包括以此为起点。
return $collectionB->map(function ($b) use ($collectionA) {
return $collectionA->map(function ($a) use ($b) {
return [
$a => $b['gender'],
$a => $b['name'],
$a => $b['role']['name'],
];
})->all();
})->all();
答案 0 :(得分:1)
您可以通过单个 map()
函数实现这一点
$data = [
[
'id' => 11,
'name' => "John Doe",
'gender' => "Male",
"role" => [
"id" => 1,
"name" => 'Director',
]
],
[
'id' => 22,
'name' => "John Doe",
'gender' => "Male",
"role" => [
"id" => 2,
"name" => 'Company Secretary',
]
]
];
$keys = [
"Gender",
"Name",
"Role",
];
$data = collect($data)->map(function ($row) use ($keys) {
return [
$keys[0] => $row['gender'],
$keys[1] => $row['name'],
$keys[2] => $row['role']['name'] ?? '',
];
});
return $data;
输出是
[{
"Gender": "Male",
"Name": "John Doe",
"Role": "Director"
},
{
"Gender": "Male",
"Name": "John Doe",
"Role": "Company Secretary"
}
]