To bardzo interesujące pytanie.
0 =1 zawsze będzie fałszywe, więc zapytanie zwróci zero wierszy. Ale dlaczego tak jest?
Ponieważ ustawiając
->whereIn('size', $size)
Laravel zakłada, że zawsze chcesz, aby zwracane wiersze miały jeden z rozmiarów w przekazanej tablicy. Jeśli nie przekazujesz żadnych wartości w tablicy, Laravel nie może tego zrobić where size IN ()
ponieważ będzie to błąd składni (w zasadzie mówisz, że dasz mi wszystkie wiersze, które pasują do tego rozmiaru, ale nie przekazujesz rozmiaru). Tak więc w przypadku, gdy tablica jest pusta, po prostu umieszcza 0 = 1
.
Aby poinformować Laravela, że jeśli żaden rozmiar nie zostanie przekazany, aby nie dodawać warunku dla rozmiaru, po prostu przed tym sprawdź.
$product = new Product;
if (!empty($sizes)) {
$product = $product->whereIn('size', $sizes);
}
$products = $product->get();
Btw to zachowanie jest poprawką
. W poprzednich wersjach Laravela, jeśli przekażesz pustą tablicę, po prostu zgłoszony został wyjątek dotyczący błędu składni. Teraz jest obsługiwane przez ustawienie 1 = 0