我正在尝试对使用视图的查询进行简单的分页:
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运行时失败?任何帮助将不胜感激。
答案 0 :(得分:1)
你知道,我在想你的Mysql服务器已经打开了sql_mode = ONLY_FULL_GROUP_BY ...你可以检查一下......(来自mysql ...选择@@ sql_mode;如果已设置,请将其关闭..并再次尝试你的查询......我认为它会通过......默认情况下,Mysql 5.7xxx已经启用...