PHP Laravel query / funktioniert nicht korrekt

PEASANT KING

Commander
Registriert
Okt. 2008
Beiträge
2.412
Guten Morgen,

ich habe einen Query in meinem Controller der bei einer Suche aufgerufen wird mittels Ajax.

Das Problem ist, das ich im Query zunächst alle Einträge haben möchte wo die Benutzer ID = der Spalte user_id meiner Tabelle ist,
danach wird dann dynamisch gesucht. Der Query sieht so aus:

PHP:
$spottings = Spotting::select()
->where('user_id','=',Auth::user()->id)
->where('registration','like',"%$search%")
->orWhere('airline','like',"%$search%")
->get();

Das Ganze funktioniert, nur das nicht die Datensätze nach der UserID gefiltert werden, sondern einfach alle Datensätze angezeigt werden, die sich in den Like Statements finden lassen. Was mache ich falsch?
Im Moment filter ich das Ganze in der Blade view mittels Javascript json Ausgabe
 
Ich geb dir mal nen Hinweis: Dir fehlen Klammern.

Mich gruselt es wenn ich so was sehe.
 
So sollte das gehen
PHP:
$spottings = Spotting::select()->where('user_id', '=', auth()->user()->id)
    ->where(function ($query) use ($search) {
        $query->where('registration', 'like', '%' . $search . '%')
            ->orWhere('airline', 'like', '%' . $search . '%');
    })->get();
 
  • Gefällt mir
Reaktionen: PEASANT KING
@MisC

Um es in Zukunft besser zu machen, was gruselt dich denn genau?

Ich habe nur das wirklich relevante hier gepostet ohne den Rest der kompletten Methode.
Mir ging es ja nur um den Query selber.

Lasse mich aber gerne eines besseren belehren. Habe schon ewig nicht mehr mit PHP programmiert und vor kurzem dann angefangen eine professionelle Webanwendung zu schreiben.

@kling1

Danke schön!
 
Zuletzt bearbeitet:
Es geht nicht um den PHP-Code, sondern um die resultierende Abfrage, die Laravel daraus macht. Du schreibst im Grunde sowas
SQL:
select * from spotting where user_id = Auth::user()->id and registration like "%$search%" or airline like "%$search%"

Das or sagt dabei jetzt, dass entweder der linke Teil der Where-Clause oder der rechte Teil der Where-Clause angewendet wird.
Was @kling1 anders gemacht hat: Er hat Klammern um den Teilausdruck gesetzt:
SQL:
select * from spotting where user_id = Auth::user()->id and (registration like "%$search%" or airline like "%$search%")
Ob das aber das ist, was du möchtest, musst du noch prüfen.

Schau aber unbedingt nochmal ins Handbuch unter https://laravel.com/docs/5.6/queries#where-clauses.
 
  • Gefällt mir
Reaktionen: new Account()
Ja die Lösung von @kling1 funktioniert habe meine Search Methode im Controller schon angepasst und in der View das JavaScript angepasst so dass dort nicht mehr gefiltert wird.

Ist damit erledigt.
 

Ähnliche Themen

Zurück
Oben