Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5:如何根据项目动态地按一列或另一列对集合进行分组';s列值?_Php_Mysql_Laravel_Group By_Eloquent - Fatal编程技术网

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()
,则它不会做任何事情。当然,我已经用代码和一些解释更新了问题。:)当然,我已经用代码和一些解释更新了问题。:)