Laravel Concat in Abfrage (wo Bedingung)

Lesezeit: 2 Minuten

Benutzeravatar von Jonathan
Jonathan

Ich bin neu in Laravel und stehe vor einem Problem beim Erstellen einer einfachen Abfrage:

$query->orWhere("CONCAT(`nvp`, ' ', `vpv`)", 'LIKE', "%$this->searchNeedle%");

Diese Zeile oben ist eine von mehreren Bedingungen in einer gekapselten Abfragebedingung. Ich denke, die anderen Zeilen sind für diesen Fall nicht notwendig, aber sagen Sie mir, ob Sie sie sehen müssen.

Ich habe herausgefunden, dass der Entwickler beschloss, hinzuzufügen A

`

vor und nach dem ersten orWhere/where-Parameter, der das Problem verursacht, dass ich kein einfaches Concat verwenden kann, da die obige Zeile zu Folgendem führt:

`CONCAT(`vpv`, ' ', `nvp`)` LIKE ?)' 
↑                         ↑
this                    & this

Da dies automatisch hinzugefügt wird, kann ich es nicht entfernen, ohne eine Laravel-Core-Funktion zu überschreiben, was ich nicht tun werde. Gibt es einen SQL-basierten “Hack”, der diese beiden handhabt ` ? So etwas wie 1 = 1, weißt du?

Vielleicht haben Sie eine andere Lösung für mich, um das beabsichtigte Ergebnis zu erzielen, indem Sie eine Zeichenfolge mit zwei Zeilen in Kombination vergleichen?

  • Vielleicht funktioniert es auch [iterare where () by request on for loop ](stackoverflow.com/a/71666425/14664943)

    – heriberto hernández torres

    29. März 2022 um 17:37 Uhr

Laravel erledigt einige Dinge hinter den Kulissen, wie das Hinzufügen der Häkchen für Sie.

Glücklicherweise bietet es auch ein paar Tools, um die Arbeit trotzdem für Sie zu erledigen …

Für so etwas DB::raw() funktioniert normalerweise sehr gut. Probieren Sie so etwas aus …

$query->orWhere(DB::raw("CONCAT(`nvp`, ' ', `vpv`)"), 'LIKE', "%".$this->searchNeedle."%");

  • Jetzt stürzt die App nicht ab, sondern führt zu folgendem: CONCAT(nvp‘ ‘, vpv) LIKE ‘%users name%’ ist null

    – Jonathan

    11. August 2014 um 13:37 Uhr


  • Ich denke, meine Syntax war ein wenig falsch, ich habe nur die Antwort geändert.

    – Benutzer1669496

    11. August 2014 um 13:40 Uhr

  • Siehst du das. Klappt wunderbar. Danke !!

    – Jonathan

    11. August 2014 um 13:42 Uhr

  • Ich rieche SQL-Injektion mit dieser Antwort, “$this->searchNeedle” kommt direkt vom Benutzer.

    – Mose Ndeda

    27. Juli 2017 um 12:08 Uhr

  • Laravel übernimmt die Parameterbindung für Sie, sodass keine SQL-Injection möglich ist. Wenn das Ganze eingepackt wäre DB::raw() du hättest Recht.

    – Benutzer1669496

    27. Juli 2017 um 12:31 Uhr

Benutzeravatar von Joseph Silber
Josef Silber

Verwenden orWhereRaw So führen Sie eine Raw-Where-Abfrage aus:

$query->orWhereRaw("CONCAT(`nvp`, ' ', `vpv`) LIKE ?", ['%'.$this->searchNeedle.'%']);

  • Es funktioniert bei mir nicht (SQL-Fehler). Ich habe es behoben, indem ich die % in das zweite Argument: $query->orWhereRaw("CONCAT(nvp, ' ', vpv) LIKE ?", ["%".$this->searchNeedle."%"]);

    – mhellmeier

    31. Dezember 2017 um 11:51 Uhr


  • Darf ich Sie bitten, sich hier eine Frage zum Thema Laravel-Tabellenverknüpfung anzusehen: stackoverflow.com/questions/52149031/… ?

    – Istiaque Ahmed

    3. September 2018 um 14:31 Uhr

  • Sie müssen ` anstelle von ‘ für die Spalten verwenden.

    – Abdullah Shakir

    11. März 2022 um 20:52 Uhr

1444860cookie-checkLaravel Concat in Abfrage (wo Bedingung)

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

Privacy policy