
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)
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.
Este es probablemente un MODO_SQL problema. En tus config/database.php
en 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,
],
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']);

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.

Chuck Le Butt
Yo también estaba teniendo este problema, pero después de cambiar 'strict' => true
para 'strict' => false
el error desapareció.
Puede encontrar esta configuración en:
config\base de datos.php
'mysql' => [
...
'strict' => false,
...
]
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.
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
dondeid
en (14, 15, 16) grupo porvehicle_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