【问题标题】:GroupBy Error in Laravel Eloquent BuilderLaravel Eloquent Builder 中的 GroupBy 错误
【发布时间】:2018-07-25 04:05:06
【问题描述】:

我不想相信 laravel 5.5 中存在错误,因为当我在查询中使用 groupBy 时,我总是在 Eloquent Query Builder 上遇到错误,这让我很惊讶。

尝试将这个可以无缝工作的 SQL 转换为 Eloquent,但我在 groupBy 上不断收到错误。

我在这里抱怨的 SQL 有一个类似的问题,直到现在我还没有得到一个完美的答案 open issue here

SELECT * FROM arm_articles
    INNER JOIN arm_interest ON arm_articles.article_category = arm_interest.category_id 
    WHERE arm_articles.article_contributor_id='1322' 
    GROUP BY arm_articles.article_id

返回错误的雄辩版本

$contributor_id =1322;
DB::table('arm_articles')
->join('arm_interest', function($join) {
    $join->on('arm_articles.article_category','=','arm_interest.category_id');
})
->having('arm_articles.article_contributor_id', '=', $contributor_id)
->groupBy('arm_articles.article_id')->get()

错误信息

SQLSTATE[42000]: Syntax error or access violation: 1055 'knowledge_db.arm_articles.id' isn't in GROUP BY (SQL: select * from 'arm_articles' inner join 'arm_interest' on 'arm_articles'.'article_category' = 'arm_interest'.'category_id' group by 'arm_articles'.'article_id' having 'arm_articles'.'article_contributor_id' = 1322)

就像我说的那样,b4 它真的很糟糕,为什么我会首先收到错误,因为在查询中添加 ->toSql 会返回正确的 SQL。

【问题讨论】:

    标签: php laravel group-by eloquent


    【解决方案1】:
    • 将此配置添加到config/database.php中的mysql数据库配置中:

         'mysql' => [
              ....
              'strict' => false,
              //'strict' => true,
          ],
      
    • 在你的mysql配置文件中编辑sql_modemy.inimy.cnf) [mysqld]

      sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
      
    • 重启 MySQL

    【讨论】:

    • 感谢您的提醒。假设我正在在线运行此应用程序,如果我使用共享主机帐户,我如何访问 sql_mode 设置?
    • 尝试只更新database.php config
    • 'mysql' => [ .... 'strict' => false, //'strict' => true, ], 帮我解决了这个问题.. 非常感谢
    猜你喜欢
    • 2020-06-24
    • 1970-01-01
    • 2020-04-26
    • 2014-09-13
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2022-01-21
    相关资源
    最近更新 更多