Laravel: error de sintaxis o infracción de acceso: error 1055

6 minutos de lectura

Laravel error de sintaxis o infraccion de acceso error 1055
Karthikvijayaveni

Quiero usar WhereIn y Groupby en la misma consulta para obtener Result.

He intentado esto:

$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();

Pero recibí este mensaje de error:

SQLSTATE[42000]: Error de sintaxis o infracción de acceso: 1055 ‘sbrtpt.loading.id’ no está en GROUP BY (SQL: select * from loading where id in (14, 15, 16) group by vehicle_no)

  • Cambie sus declaraciones groupBy y whereIn alrededor

    – Aynber

    1 de diciembre de 2016 a las 17:52

  • No funciona @aynber

    – Karthikvijayaveni

    1 de diciembre de 2016 a las 18:03


  • ¿Puedes imprimir tu mensaje de error completo?

    – Aynber

    1 de diciembre de 2016 a las 18:05

  • SQLSTATE[42000]: Error de sintaxis o infracción de acceso: 1055 ‘sbrtpt.loading.id’ no está en GROUP BY (SQL: seleccione * de loading donde id en (14, 15, 16) grupo por vehicle_no) @aynber

    – Karthikvijayaveni

    1 de diciembre de 2016 a las 18:18

  • laracasts.com/discuss/channels/eloquent/…

    – Aynber

    1 de diciembre de 2016 a las 18:36

Respuesta corta

En config\database.php –> "mysql" formación

Colocar 'strict' => false para deshabilitar todo.

…. o

Puedes irte 'strict' => true y agregar modos a "mysql" opción en

'mysql' => [
       ...
       ....
       'strict' => true,
       'modes' => [
            //'ONLY_FULL_GROUP_BY', // Disable this to allow grouping by one column
            'STRICT_TRANS_TABLES',
            'NO_ZERO_IN_DATE',
            'NO_ZERO_DATE',
            'ERROR_FOR_DIVISION_BY_ZERO',
            'NO_AUTO_CREATE_USER',
            'NO_ENGINE_SUBSTITUTION'
        ],
 ]

Respuesta detallada

Es posible que no necesite deshabilitar todos estricto opciones … Amablemente eche un vistazo a esto responder sobre este tema.

  • Gracias por una gran solución. este problema mató mis 3 horas

    – Sarower Jahan

    26 de enero de 2019 a las 22:44

  • ¿Cómo podemos establecer este modo estricto en falso en la conexión de Oracle en laravel? por favor, ayúdame

    – Vikas Chauhan

    13 de mayo de 2019 a las 8:36


  • ¡Esto funcionó! Para cualquiera que todavía reciba el mismo error después de cambiar esa configuración, intente borrar el caché de configuración ejecutando php artisan config:cache

    – Altin

    27 oct 2019 a las 16:43

  • Mi preocupación acerca de este tipo de solución alternativa codificada es que siento algún tipo de deuda técnica que no me hará dormir bien por la noche, porque el tipo de preguntas que flotarán en mi cabeza serán como: ¿qué sucede cuando Laravel y /o cambios en las especificaciones de MySQL con el modes (por ejemplo, adición/eliminación de algunos de los modos especificados en esa matriz, o peor aún, el nombre de uno de los modos especificados en esa matriz cambia). Entonces, solo me voy strict=true y no tocará ninguno mode cosa. Prefiero actualizar mi código para que funcione con una configuración tan estricta. ThisPractice === SleepWellEveryNight 🙂

    – Damilola Olowookere

    9 de febrero de 2020 a las 15:40

  • Una solución mucho mejor es escribir mejor SQL

    -Chuck Le Butt

    14 de julio de 2020 a las 21:06

Este es probablemente un MODO_SQL problema. En tus config/database.phpen la conexión, cambio

strict => false

Como en

'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => false,
    'engine' => null,
],

  • En este Método puede realizar cualquier tema de seguridad @Antonio Carlos Ribeiro

    – Karthikvijayaveni

    2 de diciembre de 2016 a las 2:02

  • Creo que es seguro o no tendrías una opción en Laravel para deshabilitarlo.

    –Antonio Carlos Ribeiro

    2 de diciembre de 2016 a las 11:16

  • No olvide ejecutar este comando después de aplicar el cambio: php craft config:cache

    – Bu Said

    29 de marzo de 2021 a las 6:44

No es necesario cambiar ningún lugar de su sistema, solo use el código como en laravel

\DB::statement("SET SQL_MODE=''");//this is the trick use it just before your query

$data=Task::where('user_id', Auth::user()->id)->where('status', 0)->groupBy('task_code')->get(['id','task_code', 'title']);

  • Gracias esto funciona de maravilla \DB::statement(“SET SQL_MODE=””);

    – Vinit Kadkol

    8 abr 2021 a las 17:29


  • Gracias, he estado buscando y probando todas las demás soluciones y no me funciona. Su solución es simple y funciona. Muchas gracias

    – Kyusuf Muhammad

    10 de agosto de 2021 a las 11:40

  • Es un placer para mí el Sr. @KyusufMuhammad y el Sr. Vinit Kadkol.

    – Sk Bindas

    11 de agosto de 2021 a las 12:19


  • Gracias, trabajó como un encanto

    – 4 R4C81D

    30 de noviembre de 2021 a las 18:18

  • Gracias @SkBindas, también funcionó para mí. También creo que esta es la mejor solución ya que no cambia la configuración global.

    – Andrei

    21 dic 2021 a las 20:35


Laravel error de sintaxis o infraccion de acceso error 1055
cesón

sin modificar config\database.php expediente

Colocar 'strict' => false en el config\database.php podría ser un problema de seguridad. Entonces, una solución simple de Laravel podría ser primera llamada get() y luego groupBy('vehicle_no):

$loadids = explode("#@*", $reciptdet->loading_id);
$loadingdatas = DB::table('loading')->whereIn('id', $loadids)->get();
$grouped = $loadingdatas->groupBy('vehicle_no');

Siempre que use groupBy en eloquent, incluya siempre el nombre de la columna utilizada en la función groupBy en la función select().

$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->select('vehicle_no')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();//add select('vehicle_no')

También es una mala práctica deshabilitar el modo estricto en el archivo de configuración. Si lo hace, puede causar que datos corruptos ingresen a la base de datos, como fechas no válidas sin ninguna advertencia. No lo haga a menos que sea absolutamente necesario.

  • La adición de ->select(‘column’) funcionó para mí. Gracias amigo 🙂

    – Shaan

    9 de junio de 2020 a las 10:35

1646956932 33 Laravel error de sintaxis o infraccion de acceso error 1055
Chuck Le Butt

Yo también estaba teniendo este problema, pero después de cambiar 'strict' => truepara 'strict' => falseel error desapareció.

Puede encontrar esta configuración en:

config\base de datos.php

'mysql' => [
    ...
    'strict' => false,
    ...
]

  • La adición de ->select(‘column’) funcionó para mí. Gracias amigo 🙂

    – Shaan

    9 de junio de 2020 a las 10:35

Esta restricción tiene sentido ya que cuando usa GROUP BY en MySQL, devuelve una fila para cada valor en las columnas utilizadas en GROUP BY. Por lo tanto, los valores de otras columnas en las filas seleccionadas no tienen sentido para usar en ninguna parte. Por lo tanto, siempre se recomienda utilizar las mejores prácticas y recomendaría no deshabilitar el modo estricto de MySQL.

A menudo, los desarrolladores pueden necesitar filas de una consulta agrupadas por el valor de una columna. Aquí no necesitan solo una fila por los valores únicos de las columnas. Pero necesitan múltiples filas agrupadas por los valores únicos de una columna en particular. Por alguna razón, utilizan groupBy Método Query Builder de Laravel que genera un MySQL GROUP BY consulta y los desarrolladores encuentran el error anterior.

La solución a su problema es usar groupBy Método de recogida en su lugar. Por ejemplo,

$loadingData = DB::table('loading')
    ->whereIn('id', $loadIds)
    ->get()
    ->groupBy('vehicle_no');

Esto les dará el resultado deseado.

  • No desea agrupar por en el servidor web, desea que ese grupo se realice en SQL. Prueba tu grupo por enfoque con una tabla de 147mil registros…

    – Juan C.

    hace 21 horas

  • @JohnC En ese caso, deben escribir las consultas de manera diferente.

    – Debiprasad

    hace 14 horas

  • lo único que le falta por ser un grupo SQL válido es una selección válida. Ese es el problema en todos estos…

    – Juan C.

    hace 4 horas

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad