Je veux utiliser WhereIn et Groupby dans Same Query pour récupérer le résultat.
J'ai essayé ceci:
$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();
Mais j'ai eu ce message d'erreur:
SQLSTATE [42000]: Erreur de syntaxe ou violation d'accès: 1055 'sbrtpt.loading.id' n'est pas dans GROUP BY (SQL: select * from loading où id dans (14, 15, 16), groupe par no_véhicule)
Dans le tableau config\database.php
-> "mysql"
Définissez 'strict' => false
pour tout désactiver.
Vous pouvez laisser 'strict' => true
et ajouter des modes à l'option "mysql"
dans
'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'
],
]
Vous n’avez peut-être pas besoin de désactiver toutes les options strict ... Veuillez jeter un oeil sur cette réponse à propos de ce problème.
C'est probablement un SQL_MODE problem. Dans votre config/database.php
, dans la connexion, changez
strict => false
Un péché
'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,
],
J'avais ce problème aussi mais après avoir changé 'strict' => true
, en 'strict' => false
.
Dans:
[config\database.php -> tableau "mysql"]
l'erreur disparaît.
Lorsque vous utilisez groupBy dans éloquent, incluez toujours le nom de la colonne utilisée dans la fonction groupBy dans la fonction select ().
$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->select('vehicle_no')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();//add select('vehicle_no')
En outre, il est déconseillé de désactiver le mode strict dans le fichier de configuration. Cela pourrait entraîner la saisie de données corrompues dans la base de données, telles que des dates non valides, sans aucun avertissement. Ne le faites que si cela est absolument nécessaire.
Set 'strict' => false
dans config\database.php
pourrait être un problème de sécurité. Donc, une solution simple de Laravel pourrait être premier appel get()
puis groupBy('vehicle_no)
:
$loadids = explode("#@*", $reciptdet->loading_id);
$loadingdatas = DB::table('loading')->whereIn('id', $loadids)->get();
$grouped = $loadingdatas->groupBy('vehicle_no');