【发布时间】:2018-04-13 04:19:08
【问题描述】:
我正在尝试对使用视图的查询进行简单的分页:
DB::table('vw_myview')->paginate(50)
并得到这个错误:
SQLSTATE[42000]:语法错误或访问冲突:1140 如果没有 GROUP BY 子句( SQL: select count(*) as aggregate from vw_myview)
然而,当我手动运行查询时,它工作得很好:
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: select count(*) as aggregate from vw_myview group by column_on_view)
好的,让我们尝试按视图使用的其中一个表上的列进行分组:
DB::table('vw_myview')->groupBy('table_used_by_view.column_on_table')->paginate(50)
SQLSTATE[42S22]:未找到列:1054 'group statement' 中的未知列 'database_name.table_used_by_view.column_on_table'(SQL:从 vw_myview 组中选择 count(*) 作为 database_name.table_used_by_view.column_on_table 的聚合)
那么为什么当我手动运行时查询可以工作,但通过 Eloquent 运行时却失败了?任何帮助将不胜感激。
【问题讨论】:
-
@RutvijKothari 我不确定那篇文章对我有帮助,它涵盖了在使用视图时处理读取和写入。我错过了什么吗?
-
这应该可以正常工作...在您看来是如何处理的?你能发布更多代码吗?
-
@Serge 这就是我真正拥有的所有代码,呵呵。它是一个预先存在的数据库,我还没有构建任何模型或控制器,只是在
routes/web.php中进行测试。我将这些数据库调用扔到一个吐出一个简单表格的视图中。我唯一修改的是数据库、表和视图的名称,因为它是为我的客户打上烙印的。 -
哇,原来如此!查看它,我发现它已启用,因为我在
config/database.php文件中启用了“严格”模式。太棒了,谢谢!如果您想添加答案,我会给您支票。
标签: php mysql laravel pagination eloquent