Incompatibilidade com sql_mode=only_full_group_by no Laravel Eloquent
Encontrando o erro "A expressão #1 da lista SELECT não está na cláusula GROUP BY.. ." ao executar uma consulta Eloquent com agrupamento sugere uma incompatibilidade com o MySQL sql_mode=only_full_group_by. Para resolver isso:
Desative o modo estrito do MySQL
Uma solução é desabilitar a configuração do modo estrito do MySQL na configuração da conexão do banco de dados. No arquivo .env do Laravel, adicione a seguinte linha:
DB_STRICT_MODE=false
Alternativamente, você pode configurar o modo estrito em seu arquivo config/database.php:
'mysql' => [
// Disable strict mode
'strict' => false,
],
Explicação
No MySQL 5.7 e posterior, o modo sql_mode=only_full_group_by requer que todas as colunas na lista SELECT sejam incluídas na cláusula GROUP BY ou sejam funções agregadas. Na consulta fornecida:
$products = Product::where('status', 1)
->where('stock', '>', 0)
->where('category_id', '=', $category_id)
->groupBy('store_id')
->orderBy('updated_at', 'desc')
->take(4)
->get();
O id da coluna (chave primária) aparece na lista SELECT, mas não está incluído na cláusula GROUP BY. Ao desabilitar o modo estrito, o MySQL permitirá colunas não agregadas na lista SELECT que não são funcionalmente dependentes das colunas GROUP BY.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3