compact(): Undefinierte Variable: Operator

Lesezeit: 3 Minuten

Benutzer-Avatar
Kareimowitsch

Ich erhalte den folgenden Fehler

  (1/1) ErrorException
  compact(): Undefined variable: operator

Das ist meine Codezeile

$postsCat = Post::whereHas('Cat', function($query) use ($sreachWord) {
    return $query->whereRaw('name REGEXP"'.sql_text_to_regx($sreachWord).'"');
})->orderBy('top','desc')
->orderBy('updated_at','desc')
->paginate(30);

Warum passiert das? Liegt es an meiner PHP-Version (7.3) oder an etwas anderem?

  • Benutzt du Laravel 5.4 und PHP 7.3?

    – Bogdan

    23. Juni 2019 um 17:33 Uhr

  • Yep – PHP7.3 hat diese bahnbrechende Änderung vorgenommen. Wir haben eine Menge Code, der davon betroffen ist – wir werden nicht zurückgehen und das Problem beheben, also sind wir leider bei 7.2 auf einer Menge Legacy-Systemen hängengeblieben. Sie können die Variable auf null setzen und 7.3 wird sie akzeptieren.

    – Wasserkaiman

    23. Juni 2019 um 17:39 Uhr

  • @Bogdan ja gleiche Version

    – Kareimowitsch

    24. Juni 2019 um 6:58 Uhr

  • Führen Sie den Befehl “Composer Update” aus, um das Problem zu beheben.

    – MrMojoRisin

    12. Februar 2020 um 16:07 Uhr

Benutzer-Avatar
Hasanur Rahman Himel

Gehen Sie zu Ihrem Projekt in

vendor\laravel\framework\src\Illuminate\Database\Query\Builder.php

In Zeilennummer 1337 finden Sie den folgenden Code in der addWhereExistsQuery Methode

$this->wheres[] = compact('type', 'operator', 'query', 'boolean');

Sie entfernen einfach den Parameter „Operator“.

Und ich hoffe, es wird gut funktionieren.

  • Danke, @Hasanur. In meinem Fall wurde der defekte Code auf Zeile 1229 gefunden Builder.php. Nachdem ich diesen Code studiert hatte, entfernte ich ihn operator wie Sie empfehlen und den Anruf an addWhereExistsQuery() erfolgreich gelaufen. Ich denke jedoch, dass Sie hinzufügen sollten, dass dies nur eine Problemumgehung für diese spezielle Instanz des hier gemeldeten größeren Problems ist: das von PHP 7.3+, das undefinierte Variablen ablehnt.

    – CODELESEN

    21. Februar 2020 um 20:57 Uhr

  • Dies ist eine Hacky-Lösung und sollte nur verwendet werden, wenn es aus irgendeinem Grund nicht möglich ist, die Laravel-Version zu aktualisieren.

    – Verschmelzung

    10. Januar 2021 um 23:01 Uhr

  • @Hasanur Rahman Himel. Ich habe dieses Problem auch und erkunde es seit zwei Stunden. Hier ist die genaue Lösung, die ich gefunden habe. Danke, dass du meine Zeit gespart hast. In meinem Fall ist es die Zeile 1229.

    – Assad Yaqoob

    18. Februar 2021 um 6:19 Uhr

  • Dies ist nicht der richtige Weg, da die angegebene Datei bei jedem Update überschrieben werden kann. “composer update” wird dieses Problem lösen

    – Tousif

    23. Februar 2021 um 10:49 Uhr


  • Nein nein Nein. Niemals Ändern Sie alle Dateien innerhalb der Verkäufer Verzeichnis! Dies ist ein schrecklicher Rat, und ich weiß nicht, warum er so oft positiv bewertet wurde.

    – Martin Bean

    5. Juli um 22:23 Uhr

Bitte beziehen Sie sich darauf
https://github.com/laravel/framework/issues/26936

Die Version von Laravel müsste aktualisiert werden.

Es gibt 2 Fixes für dieses Problem

  1. Downgrade Ihrer PHP auf 7.2
  2. Führen Sie “Composer Update” aus, da dieses Problem im neuesten Laravel behoben wurde.

Anstatt die Variable an die zu übergeben compact() -Methode übergeben Sie den Namen der Variablen als Zeichenfolge ohne das Dollarzeichen.

$postsCats = Post::all(); // example

return view('posts.index', compact('postsCats'));

Wenn Sie Ihr Laravel nicht aktualisieren können, können Sie Ihre Abfrage einfach in eine RAW-Abfrage ändern. Bei mir hat es funktioniert.

Benutzer-Avatar
Md Azizur Rahman

  $posts = Post::latest()->get();
            return view('author.post.index', compact('posts'));

Benutzer-Avatar
Begeisterter Coder

Die neueste PHP-Version erlaubt keine Verwendung von undefinierten Variablen. Anstatt die neueste Version zu entfernen, besteht eine andere Möglichkeit darin, zwischen den Versionen zu wechseln. Frühere Version installieren sagen PHP7.2 wie hier beschrieben. Stellen Sie diese dann durch Ausführen als bevorzugte Version ein sudo update-alternatives --set php /usr/bin/php7.2 auf Ihrem Ubuntu-Terminal. Dann renne composer update

1175390cookie-checkcompact(): Undefinierte Variable: Operator

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy