【问题标题】:Strange error in Laravel Eloquent query builderLaravel Eloquent 查询生成器中的奇怪错误
【发布时间】:2019-03-09 16:47:17
【问题描述】:

我知道这是一个已知问题,关于这个问题还有其他关于 SO 的问题,但没有一个有用。如果我在运行抛出 Laravel 时直接针对数据库运行,则原始查询工作正常,它会给出错误。 到底是怎么回事?

查询:

Order::selectRaw("COUNT(id) AS `data`, DATE_FORMAT(created_at, '%m-%Y') AS new_date, YEAR(created_at) AS `year`, MONTH(created_at) AS `month`")
        ->groupBy('year')->get();

错误:

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'orders.created_at' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select COUNT(id) AS `data`, DATE_FORMAT(created_at, '%m-%Y') AS new_date, YEAR(created_at) AS `year`, MONTH(created_at) AS `month` from `orders` group by `year`)

【问题讨论】:

  • 你能告诉我们你想达到什么目标吗?在 Laravel 中编码很长时间,从来没有遇到过这样的情况,所以我必须创建原始 sql 查询,100% 的时间模型和雄辩,工作。

标签: laravel eloquent laravel-query-builder


【解决方案1】:

这是数据库错误,与 Laravel 无关。在数据库中运行完全相同的查询也应该失败,如果它没有失败那么它应该:)。

您还需要按查询中的其他字段“new_date”、“month”和“year”进行分组。试试这样的:

Order::selectRaw("COUNT(id) AS `data`, DATE_FORMAT(created_at, '%m-%Y') AS new_date, YEAR(created_at) AS `year`, MONTH(created_at) AS `month`")
    ->groupBy('year', 'month', 'new_date')->get();

【讨论】:

    【解决方案2】:

    如果您在数据库中运行它时没有任何问题,那么它是您文件 config->database.php 中的 laravel 设置,只需将 'strict' 设置为 'false'

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8',
        'collation' => 'utf8_general_ci',
        'prefix' => '',
        'strict' => false,
        'engine' => null,
    ],
    

    【讨论】:

      猜你喜欢
      • 2012-10-24
      • 1970-01-01
      • 2013-01-25
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      相关资源
      最近更新 更多