在集合上链接 groupBy?
Chaining groupBy on a collection?
我有一个具有 3 个关联的实体,其中 2 个是 parent/child,我想 groupBy 并将它们嵌套在所有 3 个上。
鉴于此实体:
(int) 0 => object(Furniture\Model\Entity\FurnitureItem) {
'id' => (int) 155,
'furniture_type_id' => (int) 32,
'country' => object(Countries\Model\Entity\Country) {
'id' => (int) 14
},
'furniture_types' => object(Furniture\Model\Entity\FurnitureTypes) {
'id' => (int) 32,
'furniture_master_types' =>
object(Furniture\Model\Entity\FurnitureMasterTypes) {
'id' => (int) 142
},
},
}
其中 FurnitureItem
属于 FurnitureTypes
和 FurnitureTypes
属于 FurnitureMasterTypes
以及 FurnitureItem
属于 Countries
,我想格式化我的结果所以它是这样嵌套的:
FurnitureMasterTypes -> FurnitureTypes -> 国家 -> FurnitureItem
我试过 $query->groupBy('furniture_types.furniture_master_types.id')
进行第一级嵌套,但这显然改变了结果集并且 ->groupBy('{item}.furniture_types.id')
似乎没有应用第二级分组。
book 中没有嵌套分组依据的示例,所以想知道如何解决这个问题?
我想要的结果示例:
[
'142' => [ // FurnitureMasterType
'32' => [ // FurnitureType
'14' => [ // Country
object(Furniture\Model\Entity\FurnitureItem) {
'id' => (int) 155
}
]
]
]
]
理想情况下,如果我可以重组以包含很棒的实体级信息,例如:
[
object(Furniture\Model\Entity\FurnitureMasterTypes) {
'id' => 142,
'items' => [
object(Furniture\Model\Entity\FurnitureTypes) {
'id' => 32,
'items' => [
object(Countries\Model\Entity\Country) {
'id' => 14,
'items' => [
object(Furniture\Model\Entity\FurnitureItem) {
'id' => (int) 155
}
]
}
]
}
]
}
]
可能实际上已经找到了一种方法来做到这一点,虽然我仍然完全确认结构是 intact/right,但它似乎正在工作。
$query->formatResults(function($results) {
return $results->groupBy('furniture_types.furniture_master_types.id')
->map(function($row) {
return collection($row)->groupBy('furniture_types.id')
->map(function($row) {
return collection($row)->groupBy('country.id')->toArray();
})->toArray();
});
})->toArray();
关键是里面的 collection
调用 - 我发现了 here.
我有一个具有 3 个关联的实体,其中 2 个是 parent/child,我想 groupBy 并将它们嵌套在所有 3 个上。
鉴于此实体:
(int) 0 => object(Furniture\Model\Entity\FurnitureItem) {
'id' => (int) 155,
'furniture_type_id' => (int) 32,
'country' => object(Countries\Model\Entity\Country) {
'id' => (int) 14
},
'furniture_types' => object(Furniture\Model\Entity\FurnitureTypes) {
'id' => (int) 32,
'furniture_master_types' =>
object(Furniture\Model\Entity\FurnitureMasterTypes) {
'id' => (int) 142
},
},
}
其中 FurnitureItem
属于 FurnitureTypes
和 FurnitureTypes
属于 FurnitureMasterTypes
以及 FurnitureItem
属于 Countries
,我想格式化我的结果所以它是这样嵌套的:
FurnitureMasterTypes -> FurnitureTypes -> 国家 -> FurnitureItem
我试过 $query->groupBy('furniture_types.furniture_master_types.id')
进行第一级嵌套,但这显然改变了结果集并且 ->groupBy('{item}.furniture_types.id')
似乎没有应用第二级分组。
book 中没有嵌套分组依据的示例,所以想知道如何解决这个问题?
我想要的结果示例:
[
'142' => [ // FurnitureMasterType
'32' => [ // FurnitureType
'14' => [ // Country
object(Furniture\Model\Entity\FurnitureItem) {
'id' => (int) 155
}
]
]
]
]
理想情况下,如果我可以重组以包含很棒的实体级信息,例如:
[
object(Furniture\Model\Entity\FurnitureMasterTypes) {
'id' => 142,
'items' => [
object(Furniture\Model\Entity\FurnitureTypes) {
'id' => 32,
'items' => [
object(Countries\Model\Entity\Country) {
'id' => 14,
'items' => [
object(Furniture\Model\Entity\FurnitureItem) {
'id' => (int) 155
}
]
}
]
}
]
}
]
可能实际上已经找到了一种方法来做到这一点,虽然我仍然完全确认结构是 intact/right,但它似乎正在工作。
$query->formatResults(function($results) {
return $results->groupBy('furniture_types.furniture_master_types.id')
->map(function($row) {
return collection($row)->groupBy('furniture_types.id')
->map(function($row) {
return collection($row)->groupBy('country.id')->toArray();
})->toArray();
});
})->toArray();
关键是里面的 collection
调用 - 我发现了 here.