Hier ist das Szenario. Nehmen wir an, ich habe eine Tabelle Foo
mit zwei Spalten, bar
und baz
. Ich möchte eine Bedingung sowohl für bar
als auch für baz
überprüfen. Diese Bedingung gilt nur für eine der beiden Spalten. Für welche Spalte es auch gilt, ich möchte die andere Spalte auswählen.Wie kann man bedingt auswählen, welche Spalte basierend auf der WHERE-Klausel in einer einzigen Abfrage SELECT wird?
Ich kann dies als zwei separate Abfragen schreiben, wie folgt aus:
$one = Foo::select('bar as qux')->where('baz', $value);
$two = Foo::select('baz as qux')->where('bar', $value);
(Aus Gründen der Darstellung ist die Bedingung in meinem Beispiel überprüft, ob die Spalte $value
gleich ist.)
Danach könnte ich die Ergebnisse der beiden Abfragen erhalten und sie zusammenführen. Ich möchte jedoch unter anderem einen Paginator
verwenden, um eine einzige Abfrage zu erstellen.
Ich kann alle relevanten Zeilen aus der Tabelle wählen Sie diese mit:
$rows = Foo::where('baz', $value)->orWhere('bar', $value);
Aber dann weiß ich nicht, wie bar
oder baz
von dort bedingt zu wählen. Es scheint, als ob die Lösung, die ich suche, eine Kombination der beiden obigen Methoden wäre.
Ist es möglich, dies in einer einzigen Abfrage mit Eloquent zu tun? Ich denke, ich kann eine rohe Abfrage ausführen, aber ich würde lieber von rohen Abfragen vollständig wegbleiben, wenn möglich. Vielen Dank.
Meine erste Antwort auf Sie zu sagen war: Ich will nicht, 'zu erhalten () 'die Ergebnisse sofort, weil ich sie paginieren möchte. Aber dann hat es mich getroffen, dass ich einfach das Ergebnis des orWhere paginieren und durchgehen kann. Danke, es sieht so aus, als würde ich es oft überdenken! – cheryllium