Php Laravel 5:如何根据项目动态地按一列或另一列对集合进行分组';s列值?
作为一个雄辩的模型查询的结果,我有一个项目集合。我需要做的是,根据特定项的字段值(如果它满足某个条件),以某种方式将该集合的项按一列或另一列进行分组。是否可以在Php Laravel 5:如何根据项目动态地按一列或另一列对集合进行分组';s列值?,php,mysql,laravel,group-by,eloquent,Php,Mysql,Laravel,Group By,Eloquent,作为一个雄辩的模型查询的结果,我有一个项目集合。我需要做的是,根据特定项的字段值(如果它满足某个条件),以某种方式将该集合的项按一列或另一列进行分组。是否可以在groupBy()中使用函数,或者如果可能的话,还有其他方法可以做到这一点?如果需要的话,我会提供额外的细节,以防出现这种情况的理论解决方案 更新: 下面是我创建两个独立集合并对每个集合进行分组的代码: ... // First collection which is grouped by grouping_field1 $non_gr
groupBy()
中使用函数,或者如果可能的话,还有其他方法可以做到这一点?如果需要的话,我会提供额外的细节,以防出现这种情况的理论解决方案
更新:
下面是我创建两个独立集合并对每个集合进行分组的代码:
...
// First collection which is grouped by grouping_field1
$non_grouped_products = Product::with("some_relation")
->whereHas("some_relation", function($q) {
$q->where("conditional_field", 0)
->where("some_field1", 1)
->orWhere("some_field2", 0);
})->where("some_field3", "some_value")
->where("some_field4", "some_value2")
->get()
->groupBy("grouping_field1");
// Second collection which is grouped by grouping_field2
$products = Product::with("some_relation")
->whereHas("some_relation", function($q) {
$q->where("conditional_field", 1)
->where("some_field1", 1)
->orWhere("some_field2", 0);
})->where("some_field3", "some_value")
->where("some_field4", "some_value2")
->get()
->groupBy("grouping_field2");
$all_products = [];
// Here is where I join the collections
foreach ($products as $key => $product) {
$all_products[$key] = $product;
}
foreach ($non_grouped_products as $key => $product) {
$all_products[$key] = $product;
}
$merged_collection = new Collection($all_products);
...
我之所以需要避免创建两个集合,是因为我希望只创建一次orderBy()
,而不是在每个初始集合上单独创建,因为合并后的排序不再正确。
我需要检查条件_字段的值,如果它满足一个或另一个条件,我需要按一个分组字段对项目进行分组
我希望我说得够清楚。如果你需要一些其他细节,我会提供给你,这样你就更容易理解所有的情况以及我需要实现的具体目标。先谢谢你!:) 从中可以看出,groupBy函数的第一个参数是一个可调用的|字符串。因此,是的,这是可能的,但我们只能在您发布代码时提供帮助,正如您可以从中看到的那样,groupBy函数的第一个参数是一个可调用的|字符串。是的,这是可能的,但我们只能在您发布代码时提供帮助向我们展示代码,您想做什么!我们肯定会对此有所帮助。我已经编辑了这个问题,添加了一些关于我的问题的代码和细节。-->groupBy(“grouping_field2”);在get之前编写,在get之后编写。我的想法是,我希望保留group by value作为集合项的键,这就是分组的要点。如果在使用从模型中检索到的项创建集合之前放置groupBy()
,它将不会做任何事情。请向我们展示代码,您想做什么!我们肯定会对此有所帮助。我已经编辑了这个问题,添加了一些关于我的问题的代码和细节。-->groupBy(“grouping_field2”);在get之前编写,在get之后编写。我的想法是,我希望保留group by value作为集合项的键,这就是分组的要点。如果在使用从模型中检索到的项创建集合之前放置groupBy()
,则它不会做任何事情。当然,我已经用代码和一些解释更新了问题。:)当然,我已经用代码和一些解释更新了问题。:)