Incompatibilidad con sql_mode=only_full_group_by en Laravel Eloquent
Encontrar el error "La expresión n.° 1 de la lista SELECT no está en la cláusula GROUP BY... ." al ejecutar una consulta Eloquent con agrupación sugiere una incompatibilidad con sql_mode=only_full_group_by de MySQL. Para resolver esto:
Deshabilitar el modo estricto de MySQL
Una solución es deshabilitar la configuración del modo estricto de MySQL en la configuración de conexión de su base de datos. En el archivo .env de Laravel, agregue la siguiente línea:
DB_STRICT_MODE=false
Alternativamente, puede configurar el modo estricto en su archivo config/database.php:
'mysql' => [
// Disable strict mode
'strict' => false,
],
Explicación
En MySQL 5.7 y posteriores, el modo sql_mode=only_full_group_by requiere que todas las columnas de la lista SELECT se incluyan en la cláusula GROUP BY o se funciones agregadas. En la consulta proporcionada:
$products = Product::where('status', 1)
->where('stock', '>', 0)
->where('category_id', '=', $category_id)
->groupBy('store_id')
->orderBy('updated_at', 'desc')
->take(4)
->get();
La identificación de la columna (clave principal) aparece en la lista SELECT pero no está incluida en la cláusula GROUP BY. Al deshabilitar el modo estricto, MySQL permitirá columnas no agregadas en la lista SELECT que no dependen funcionalmente de las columnas GROUP BY.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3