0 collections laravel laravel-collection
我正在开发一个使用 Laravel 5.8 的小型应用程序作为狗收容所。
\n\n我的 Dog 模型中有一个查询,它检索我感兴趣的狗品种:
\n\npublic function getBreeds()\n {\n return $collection = DB::table(\'dogs\')->whereIn(\'name\', [\'Breed1\', \'Breed2\', \'Breed3\', \'Breed4\'])->get();\n }\nRun Code Online (Sandbox Code Playgroud)\n\n我得到了一个包含大约 100 个项目的集合,如下所示:
\n\nCollection {#373 \xe2\x96\xbc\n #items: array:100 [\xe2\x96\xbc\n 0 => {#380 \xe2\x96\xbc\n +"id": 1792\n +"join_date": "2019-03-21 07:40"\n +"name": "Breed1"\n +"age": 9.3\n }\n 1 => {#382 \xe2\x96\xbc\n +"id": 1801\n +"join_date": "2019-03-21 09:35"\n +"name": "Breed2"\n +"age": 29.1\n }\n 2 => {#372 \xe2\x96\xbc\n +"id": 1803\n +"join_date": "2019-03-21 14:10"\n +"name": "Breed3"\n +"age": 60.9\n }\n 3 => {#385 \xe2\x96\xbc\n +"id": 1805\n +"join_date": "2019-03-21 14:12"\n +"name": "Breed4"\n +"age": 0.7\n }\n 4 => {#386 \xe2\x96\xbc\n +"id": 1806\n +"join_date": "2019-03-21 14:14"\n +"name": "Breed1"\n +"age": 75.4\n }\n 5 => {#387 \xe2\x96\xbc\n +"id": 2872\n +"join_date": "2019-03-21 16:07"\n +"name": "Breed2"\n +"age": 9.5\n }\n 6 => {+"name": "Breed3"}\n 7 => {+"name": "Breed4"}\n 8 => {+"name": "Breed1"}\n 9 => {+"name": "Breed2"}\n 10 => {+"name": "Breed3"}\n 100 => {}\n ]\n}\n\nRun Code Online (Sandbox Code Playgroud)\n\n我需要为每个品种获取年龄最低和最高的两个收藏品。 这应该会产生 4 个不同品种(如查询的)的 8 个项目的集合,其中包含每个品种中最年轻和最年长的狗。
\n\n我尝试过使用filter()或与andeach()结合使用,但无法获得所需的输出。min()max()
首先按$collection名称分组。
然后为每个group找到max和min对象。
示例代码
$collection->groupBy('name')->map(function($group, $groupName) {
return [
'name' => $groupName,
'dogs' => [
'min' => $group->firstWhere('age', $group->min('age')),
'max' => $group->firstWhere('age', $group->max('age')),
];
];
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3978 次 |
| 最近记录: |