Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O erro do MySQL é lançado quando a paginação laravel é usada


É possível definir o modo SQL ONLY_FULL_GROUP_BY no MySQL 5.6, mas não é definido por padrão (consulte https://dev.mysql.com/doc/refman/5.6/en/sql-mode.html ).

Aha, vejo que seu comentário apareceu acima, você confirmou que ONLY_FULL_GROUP_BY está definido em seu servidor local (MySQL 5.7).

Acho que você errou em alguma coisa na descrição do seu problema. Você deve receber o erro em seu servidor local, mas não no servidor ativo, se o local tiver ONLY_FULL_GROUP_BY e o ativo não.

Eu sugiro que você certifique-se de usar a mesma versão em desenvolvimento que a versão que você usa na produção e também corresponder ao mesmo modo SQL. Isso evitará confusão durante o desenvolvimento.

Eu faço a mesma sugestão sobre a versão do PHP. Se você usar alguns novos recursos do PHP 7 em desenvolvimento e, em seguida, implantar em seu servidor ao vivo do PHP 5.6, eles não funcionarão.

O SQL que você descreve deve estar bem:
select count(*) as aggregate from `parameter_log_site_detail` where `site_id` = EPE

Isso é realmente bom, mesmo se você tiver ONLY_FULL_GROUP_BY. Certamente é legal fazer um select count(*) de todas as linhas correspondentes na tabela. Você não precisa de uma cláusula GROUP BY para esta consulta.

Mas se você misturar colunas agregadas com colunas não agregadas, você violará os requisitos ONLY_FULL_GROUP_BY, porque as colunas não agregadas seriam ambíguas.
select id, count(*) as aggregate from ...

Gostaria de saber se o Laravel está inserindo colunas extras em sua lista de seleção antes de preparar a consulta. Você teria que habilitar o log de consulta do MySQL para ter certeza.

Percebo que há alguma discussão sobre esse erro em problemas do Laravel:https://github.com /laravel/framework/issues/15232

A solução que vários usuários nesse tópico disseram que corrige o problema é definir 'strict'=>false em seu Laravel config/database.php.

Mas eu apostaria que a causa raiz é que o Laravel está modificando sua consulta SQL.