Laravel:在视图上分页查询MySQL Error 1140混合GROUP列

时间:2017-10-31 21:33:20

标签: php mysql laravel pagination eloquent

我正在尝试对使用视图的查询进行简单的分页:

DB::table('vw_myview')->paginate(50)

并收到此错误:

SQLSTATE [42000]:语法错误或访问冲突:1140如果没有GROUP BY子句,则GROUP GROUP列(MIN(),MAX(),COUNT(),...)的混合没有GROUP列是非法的( SQL:从vw_myview选择count(*)作为聚合)

然而,当我手动运行查询时,它的工作正常:

mysql> select count(*) as aggregate from vw_myview;
+-----------+
| aggregate |
+-----------+
|       776 |
+-----------+
1 row in set (0.20 sec)

在搜索之后我发现我应该只需要添加一个GROUP BY子句(就像错误所说的那样)并且我尝试过这样做而没有运气:

DB::table('vw_myview')->groupBy('column_on_view')->paginate(50)

SQLSTATE [42000]:语法错误或访问冲突:1055' database_name.table_used_by_view.column_on_table'不在GROUP BY中(SQL:选择count(*)作为vw_myview group by column_on_view的聚合)

好吧,让我们尝试按照视图使用的其中一个表上的列进行分组:

DB::table('vw_myview')->groupBy('table_used_by_view.column_on_table')->paginate(50)

SQLSTATE [42S22]:找不到列:1054未知列' database_name.table_used_by_view.column_on_table'在'组声明' (SQL:通过database_name.table_used_by_view.column_on_table从vw_myview group中选择count(*)作为聚合)

那么为什么查询在我手动运行时有效但在通过Eloquent运行时失败?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

你知道,我在想你的Mysql服务器已经打开了sql_mode = ONLY_FULL_GROUP_BY ...你可以检查一下......(来自mysql ...选择@@ sql_mode;如果已设置,请将其关闭..并再次尝试你的查询......我认为它会通过......默认情况下,Mysql 5.7xxx已经启用...