Có thể đặt chế độ SQL ONLY_FULL_GROUP_BY trong MySQL 5.6, nhưng nó không được đặt theo mặc định (xem https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html ).
Aha, tôi thấy nhận xét của bạn xuất hiện ở trên, bạn đã xác nhận rằng ONLY_FULL_GROUP_BY được đặt trên máy chủ cục bộ của bạn (MySQL 5.7).
Tôi nghĩ rằng bạn đã viết sai điều gì đó trong mô tả vấn đề của bạn. Bạn sẽ gặp lỗi trên máy chủ cục bộ của mình, nhưng không phải trên máy chủ trực tiếp, nếu cục bộ có ONLY_FULL_GROUP_BY và trực tiếp thì không.
Tôi khuyên bạn nên đảm bảo sử dụng cùng một phiên bản đang phát triển với phiên bản bạn sử dụng trong sản xuất và cũng khớp với cùng một chế độ SQL. Điều này sẽ tránh nhầm lẫn trong quá trình phát triển.
Tôi đưa ra đề xuất tương tự về phiên bản PHP. Nếu bạn sử dụng một số tính năng PHP 7 mới đang được phát triển và sau đó triển khai tới máy chủ trực tiếp PHP 5.6 của mình, chúng sẽ không hoạt động.
SQL mà bạn mô tả sẽ ổn:
select count(*) as aggregate from `parameter_log_site_detail` where `site_id` = EPE
Điều này thực sự ổn, ngay cả khi bạn có ONLY_FULL_GROUP_BY. Việc thực hiện select count(*)
là hợp pháp của tất cả các hàng phù hợp trong bảng. Bạn không cần mệnh đề GROUP BY cho truy vấn này.
Nhưng nếu bạn kết hợp các cột được tổng hợp với các cột không được tổng hợp, bạn sẽ vi phạm các yêu cầu của ONLY_FULL_GROUP_BY, bởi vì các cột không được tổng hợp sẽ không rõ ràng.
select id, count(*) as aggregate from ...
Tôi tự hỏi liệu Laravel có đang chèn (các) cột bổ sung vào danh sách lựa chọn của bạn trước khi chuẩn bị truy vấn hay không. Bạn phải bật nhật ký truy vấn MySQL để chắc chắn.
Tôi nhận thấy rằng có một số cuộc thảo luận về lỗi này trên các vấn đề Laravel: https://github.com / laravel / framework / issue / 15232
Giải pháp mà một số người dùng trong chuỗi đó cho biết để khắc phục sự cố là đặt 'strict'=>false
trong cấu hình Laravel / database.php của bạn.
Nhưng tôi dám cá rằng nguyên nhân gốc rễ là do Laravel đang sửa đổi truy vấn SQL của bạn.