Това е много интересен въпрос.
0 =1 винаги ще бъде невярно, така че вашата заявка ще върне нула редове. Но защо е това?
Тъй като чрез настройка
->whereIn('size', $size)
Laravel предполага, че винаги искате върнатите редове да бъдат с един от размерите в предадения масив. Ако не подадете никакви стойности в масива, Laravel не може да направи това where size IN ()
защото това ще бъде синтактична грешка (вие основно казвате дайте ми всички редове, които съответстват на този размер, но не предавате размер). Така че в случай, че масивът е празен, той просто поставя 0 = 1
.
За да кажете на Laravel, ако не е подаден размер, да не добавя условие за размер, просто поставете проста проверка преди това.
$product = new Product;
if (!empty($sizes)) {
$product = $product->whereIn('size', $sizes);
}
$products = $product->get();
Между другото това поведение е актуална корекция
. В предишни версии на Laravel, ако подадете празен масив, просто сте имали изключение за синтактична грешка. Сега това се обработва само чрез задаване на 1 = 0