gpt4 book ai didi

php - 拉维尔 5 : How to group a collection dynamically by one column or another depending on item's column value?

转载 作者:行者123 更新时间:2023-11-30 22:03:28 25 4
gpt4 key购买 nike

作为 Eloquent 模型查询的结果,我有一个项目集合。我需要做的是以某种方式将该集合的项目按一列或另一列分组,具体取决于特定项目的字段值(如果它满足条件)。是否可以在 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() 而不是在每个初始集合上单独执行一次,因为合并后排序不再正确。我需要检查 conditional_field 的值,如果它满足一个或另一个条件,我需要按其中一个分组字段对项目进行分组。

我希望我说得够清楚了。如果您需要其他一些详细信息,我会提供给您,这样您就可以更轻松地了解所有情况以及我需要实现的具体目标。先感谢您! :)

最佳答案

the docs可以看出, groupBy 函数的第一个参数是可调用的 |字符串。所以是的,这是可能的,但我们只能在您发布代码时提供帮助

关于php - 拉维尔 5 : How to group a collection dynamically by one column or another depending on item's column value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42580065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com