Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Database 在Laravel中按多个列分组_Database_Laravel - Fatal编程技术网

Database 在Laravel中按多个列分组

Database 在Laravel中按多个列分组,database,laravel,Database,Laravel,如何在Laravel中按多个列进行分组? 我尝试了以下代码: $routes = DB::table('route') ->groupBy('rte_origin') ->groupBy('rte_destination') ->get(); 但这不起作用。您是否尝试过: $routes = DB::table('route') ->groupBy('rte_origin', 'rte_destination') ->get(); 现在无

如何在Laravel中按多个列进行分组? 我尝试了以下代码:

$routes = DB::table('route')
    ->groupBy('rte_origin')
    ->groupBy('rte_destination')
    ->get();
但这不起作用。

您是否尝试过:

$routes = DB::table('route')
->groupBy('rte_origin', 'rte_destination')
->get();
现在无法在此测试,但API说groupBy()接受数组

有关参考资料,请浏览:

  • Laravel 5.0:
  • Laravel 4.2:

认为Database\Query\Builder::groupBy()方法接受数组作为参数是不正确的。目前,它只接受N个字符串参数

在撰写本文时,Laravel框架的当前版本为:v4.2.4,Database\Query\Builder::groupBy()方法的代码如下:

/**
 * Add a "group by" clause to the query.
 *
 * @param  dynamic  $columns
 * @return \Illuminate\Database\Query\Builder|static
 */
public function groupBy()
{
    $this->groups = array_merge((array) $this->groups, func_get_args());

    return $this;
}
仔细想想,func_get_args()返回一个数组,其中包含可能作为字符串输入的所有列。因此,该功能的预期输入为:

$builder->groupBy('column1', 'column2', ...);
生成的生成器对象上的$this->groups属性应该是一个字符串数组,如下所示:

['column1','column2']
$builder->groupBy(['column1','column2']);
[['column1','column2']]
但是,如果我们向上述方法中输入一个数组,如下所示:

['column1','column2']
$builder->groupBy(['column1','column2']);
[['column1','column2']]
$this->groups属性将以如下所示的嵌套数组结束:

['column1','column2']
$builder->groupBy(['column1','column2']);
[['column1','column2']]
查询生成器框架的其余部分希望$builder->groups属性是非嵌套字符串数组。因此,当框架尝试以正确的转义格式列化和包装表名时(每个数据库引擎都有一个不同的表名转义操作符),它尝试包装数组而不是字符串,您将得到错误

有问题的错误行是Database\Grammar::wrap()中的第49行

如果我们要修改Database\Query\Builder::groupBy()方法使其接受数组,我们将重写它,如下所示:

public function groupBy()
{
    $args = func_get_args();
    foreach($args AS $arg)
    {
        $arg = (is_array($arg)) ? $arg:[$arg];
        $this->groups = array_merge((array) $this->groups, $arg);
    }

    return $this;
}

此方法接受任何参数索引处的数组。

编辑应用程序的数据库配置文件
config/database.php


在mysql数组中,设置
strict=>false
以禁用mysql的严格模式以使其正常工作。

select
放在
groupBy
之前,并将参数放在括号中

$routes = DB::table('route')
    ->select(['column_1', 'column_2'])
    ->groupBy(['column_1', 'column_2'])
    ->get();

这也不起作用。显示错误如下。ErrorException strtolower()要求参数1为字符串,数组为givenOuch。对不起,萨特扬。让我回家,我会给你做个测试。仅供参考,最初groupBy()不接受数组,如中所述。该功能是在L4.2(或更早版本)中添加的,请参阅以供参考。@gustavaramos您到laravel文档的链接已失效。请参阅L5.0版本或L4.2版本,以便指出这一点,@Seantheban。我已经编辑了主要答案。干杯已向Laravel团队提交拉拽请求以解决此问题。请参阅:L4.2中添加了将数组传递给groupBy()的功能。请参阅以供参考。它对我有效,您发现您的问题了吗?有一点输入错误,它是
->groupBy()