【问题标题】:laravel grouping by multiple columnslaravel 按多列分组
【发布时间】:2017-02-01 07:25:42
【问题描述】:

我正在使用 laravel 5.2,我想根据两列的值(配置和类型)对表进行分组。所以基本上如果表中的两行或多行具有相同的配置和类型,它们将被分组。 我试过这样查询,但它不起作用:

 $groups = Model::where('active', 1)->get()->groupBy('type_id', 'configuration_id');

有什么建议吗?

编辑:我认为我使用了错误的查询。我想要做的是获取这两列中具有相同值的行并将它们分组。显然 group by 用于聚合事物,例如如果我想要一个总和什么的。

编辑 2:实际上我在这里使用的 groupby 不是查询的一部分,它是 laravel 提供的用于集合的辅助函数,请参阅link 有谁知道它是否按两个字段分组??

【问题讨论】:

    标签: php sql database laravel


    【解决方案1】:

    好的,我想通了。 我使用的 groupBy 方法不是一个查询,它是一个按特定字段对集合进行分组的 laravel 函数。您可以查看文档here。所以解决方法是像这样进行两次分组。

    $groups = Model::where('active', 1)->get()->groupBy('type_id');
    
    foreach ($groups as $group) {
        $grouped[] =  $group->groupBy('configuration_id');
    }
    

    【讨论】:

    • 谢谢,伙计!这一定救了我很多天!
    【解决方案2】:

    以数组形式传递列名这对我有用

    $groups = Model::where('active', 1)->groupBy(['type_id', 'configuration_id','etc']);
    

    【讨论】:

    • 在 laravel 5.6 中测试需要有数组。感谢您指出了这一点 。很有帮助
    • @DeepeshThapa 欢迎 ;)
    【解决方案3】:
     $groups = Model::where('active', 1)->groupBy('type_id', 'configuration_id')->get();
    

    【讨论】:

    • 这个有效,但它获得了每组的第一个。知道为什么吗?
    • 不知道。也许我们会参考该文档,以便我们对此有所了解。
    • @user3552551 将 groupBy 放在 get() 之后,它将按您的预期工作。不要问我为什么我不知道:)
    • 可能是因为在获取之前 - 它适用于数据库端的分组 - 并且第一个结果 - 它按预期工作。在get 之后 - 您已经在 php 端对集合进行分组。
    【解决方案4】:

    这样试试

    $groups = Model::where('active', 1)->groupBy('type_id', 'configuration_id');
    

    【讨论】:

      【解决方案5】:
      $groups = Model::where('active', 1)->groupBy('type_id', 'configuration_id')->get(['type_id', 'configuration_id']);
      

      【讨论】:

      • 好的...它将列分组,您可以通过get函数获取一些特定的字段...
      猜你喜欢
      • 2014-06-04
      • 2019-06-28
      • 2010-10-25
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多