【问题标题】:Laravel: Paginating a query on a view MySQL Error 1140 Mixing of GROUP columnsLaravel:对视图 MySQL 错误 1140 混合 GROUP 列的查询进行分页
【发布时间】: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


【解决方案1】:

你知道,我在想你的 Mysql 服务器开启了 sql_mode = ONLY_FULL_GROUP_BY...你能检查一下吗...(从 mysql...选择@@sql_mode;如果设置了,请将其关闭。 . 并再次尝试您的查询... 我认为它会通过... Mysql 5.7xxx 现在默认打开此功能...

【讨论】:

  • 在 Laravel 中,您可以通过编辑 config/database.php 并将连接上的 'strict' 设置为 false 来禁用此功能。
猜你喜欢
  • 2010-11-17
  • 2019-02-11
  • 2018-09-25
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2013-08-01
相关资源
最近更新 更多