wake-up-neo.com

Laravel: Syntaxfehler oder Zugriffsverletzung: 1055 Fehler

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.

32

Kurze Antwort

Im config\database.php -> "mysql"-Array

Stellen Sie 'strict' => false ein, um alle zu deaktivieren.

.... oder

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'
        ],
 ]

Ausführliche Antwort

Möglicherweise müssen Sie nicht alle strict - Optionen deaktivieren ... _. Sehen Sie sich bitte diese Antwort zu diesem Problem an.

58
Husam

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.

4
Zakhele

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.

1
Thungdemo

Ohne Änderung der Datei config\database.php

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');
0
cespon