MySQL 5.6でSQLモードONLY_FULL_GROUP_BYを設定することは可能ですが、デフォルトでは設定されていません( https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html )。
ああ、あなたのコメントが上に表示されているのがわかります。ローカルサーバー(MySQL 5.7)でONLY_FULL_GROUP_BYが設定されていることを確認しました。
問題の説明で何かを間違えたと思います。ローカルにONLY_FULL_GROUP_BYがあり、ライブにない場合は、ローカルサーバーでエラーが発生するはずですが、ライブサーバーでは発生しません。
開発では、本番環境で使用しているバージョンと同じバージョンを使用し、同じSQLモードと一致していることを確認することをお勧めします。これにより、開発中の混乱を防ぐことができます。
PHPのバージョンについても同じ提案をします。開発でいくつかの新しいPHP7機能を使用してから、PHP 5.6ライブサーバーにデプロイすると、それらは機能しません。
説明するSQLは問題ないはずです:
select count(*) as aggregate from `parameter_log_site_detail` where `site_id` = EPE
ONLY_FULL_GROUP_BYがある場合でも、これは実際には問題ありません。 select count(*)
を実行することは確かに合法です テーブル内の一致するすべての行の。このクエリにはGROUPBY句は必要ありません。
ただし、集約された列と集約されていない列を混在させると、集約されていない列があいまいになるため、ONLY_FULL_GROUP_BY要件に違反することになります。
select id, count(*) as aggregate from ...
クエリを準備する前に、Laravelが選択リストに余分な列を挿入しているのではないかと思います。確実にMySQLクエリログを有効にする必要があります。
Laravelの問題についてこのエラーについての議論があることに気づきました: https://github.com / laravel / framework / issues / 15232
そのスレッドのいくつかのユーザーが問題を修正すると言った解決策は、'strict'=>false
を設定することです Laravel config/database.phpにあります。
しかし、根本的な原因は、LaravelがSQLクエリを変更していることだと思います。