Ich möchte WhereIn und Groupby in Same Query verwenden, um das Ergebnis abzurufen.
Ich habe das probiert:
$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();
Ich habe aber diese Fehlermeldung erhalten:
SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1055 'sbrtpt.loading.id' befindet sich nicht in GROUP BY.
Im config\database.php
-> "mysql"
-Array
Stellen Sie 'strict' => false
ein, um alle zu deaktivieren.
Sie können 'strict' => true
verlassen und Modi zur "mysql"
-Option in hinzufügen
'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'
],
]
Möglicherweise müssen Sie nicht alle strict - Optionen deaktivieren ... _. Sehen Sie sich bitte diese Antwort zu diesem Problem an.
Dies ist wahrscheinlich ein SQL_MODE Problem. Ändern Sie in Ihrem config/database.php
in der Verbindung
strict => false
Wie in
'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,
],
Ich hatte dieses Problem aber auch, nachdem ich 'strict' => true
in 'strict' => false
geändert hatte.
Im:
[config\database.php -> "mysql" -Array]
der Fehler verschwindet.
Wenn Sie groupBy in eloquent verwenden, geben Sie in der Funktion select () immer den in der Funktion groupBy verwendeten Spaltennamen an.
$loadids=explode("#@*",$reciptdet->loading_id);
$loadingdatas=DB::table('loading')->select('vehicle_no')->groupBy('vehicle_no')->whereIn('id',$loadids)->get();//add select('vehicle_no')
Es ist auch eine schlechte Praxis, den strikten Modus in der Konfigurationsdatei zu deaktivieren. Andernfalls können beschädigte Daten, z. B. ungültige Daten, ohne Warnungen in die Datenbank gelangen. Tun Sie dies nicht, wenn dies nicht unbedingt erforderlich ist.
Set 'strict' => false
im config\database.php
könnte ein Sicherheitsproblem sein. Eine einfache Laravel-Lösung könnte also zuerst get()
und dann groupBy('vehicle_no)
sein:
$loadids = explode("#@*", $reciptdet->loading_id);
$loadingdatas = DB::table('loading')->whereIn('id', $loadids)->get();
$grouped = $loadingdatas->groupBy('vehicle_no');