Używam konstruktora zapytań Laravel Eloquent i mam zapytanie, w którym chcę WHERE
klauzulę dotyczącą wielu warunków. Działa, ale nie jest elegancki.
Przykład:
$results = User::where('this', '=', 1)
->where('that', '=', 1)
->where('this_too', '=', 1)
->where('that_too', '=', 1)
->where('this_as_well', '=', 1)
->where('that_as_well', '=', 1)
->where('this_one_too', '=', 1)
->where('that_one_too', '=', 1)
->where('this_one_as_well', '=', 1)
->where('that_one_as_well', '=', 1)
->get();
Czy jest na to lepszy sposób, czy powinienem trzymać się tej metody?
->where(...)
połączeń można zastąpić->whereIn(...)
połączeniem itd .Odpowiedzi:
W Laravel 5.3 (i wciąż prawdziwy od wersji 7.x ) możesz użyć bardziej szczegółowego ciągu, który jest przekazywany jako tablica:
Osobiście nie znalazłem przypadku użycia tylko dla wielu
where
połączeń, ale faktem jest, że możesz go użyć.Od czerwca 2014 r. Możesz przekazać tablicę do
where
Tak długo, jak chcesz wszystkie operator
wheres
użyciaand
, możesz pogrupować je w ten sposób:Następnie:
Powyższe spowoduje takie zapytanie:
źródło
=
.WHERE (a IS NOT NULL AND b=1) OR (a IS NULL AND b=2);
?$users = DB::table('users')->where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get();
whereNotIn
zgodnie z twoją odpowiedzią, mając innewhere
cluazy?Zakresy zapytań mogą pomóc w zwiększeniu czytelności kodu.
http://laravel.com/docs/eloquent#query-scopes
Aktualizacja tej odpowiedzi za pomocą jakiegoś przykładu:
W swoim modelu utwórz metody zakresów takie jak to:
Następnie możesz wywołać ten zakres podczas budowania zapytania:
źródło
Możesz użyć podkwerend w funkcji anonimowej, takiej jak ta:
źródło
W takim przypadku możesz użyć czegoś takiego:
Powinien dostarczyć Ci zapytanie takie jak:
źródło
Warunki korzystania z macierzy:
Wytworzy zapytanie jak poniżej:
Warunki korzystania z funkcji anonimowej:
Wytworzy zapytanie jak poniżej:
źródło
Wiele klauzul where
wreszcie uzyskam wynik
źródło
whereColumn
Sposób może być przekazywana szereg różnych warunkach. Warunki te zostaną połączone za pomocąand
operatora.Przykład:
Aby uzyskać więcej informacji, sprawdź tę sekcję dokumentacji https://laravel.com/docs/5.4/queries#where-clauses
źródło
LUB
LUB
źródło
Pamiętaj, aby zastosować wszystkie inne filtry do zapytań podrzędnych, w przeciwnym razie lub może zgromadzić wszystkie rekordy.
źródło
źródło
Bez prawdziwego przykładu trudno jest wydać zalecenie. Jednak nigdy nie potrzebowałem używać tylu klauzul WHERE w zapytaniu, co może wskazywać na problem ze strukturą danych.
Pomocne może być poznanie normalizacji danych: http://en.wikipedia.org/wiki/Third_normal_form
źródło
Możesz używać elokwentnego w Laravel 5.3
Wszystkie wyniki
Częściowe wyniki
źródło
użyj
whereIn
warunku i przekaż tablicę$array = [1008,1009,1010];
User::whereIn('users.id', $array)->get();
źródło
Możesz użyć tablicy w klauzuli where, jak pokazano poniżej.
źródło
źródło
Zgodnie z moją sugestią, jeśli wykonujesz filtr lub wyszukiwanie
powinieneś iść z:
źródło
Użyj tego
źródło
Używając czystego Elokwenta, zaimplementuj go w ten sposób. Ten kod zwraca wszystkich zalogowanych użytkowników, których konta są aktywne.
$users = \App\User::where('status', 'active')->where('logged_in', true)->get();
źródło
Próbka kodu.
Po pierwsze :
tablica jest wypełniana tutaj za pomocą żądanej liczby / pętli warunków, stopniowo:
i tu:
i dalej z elokwentami, takimi jak:
źródło
źródło
źródło