Dette er meget interessant spørgsmål.
0 =1 vil altid være falsk, så din forespørgsel vil returnere nul rækker. Men hvorfor er dette?
Fordi ved at indstille
->whereIn('size', $size)
Laravel antager, at du altid ønsker, at de returnerede rækker skal have en af størrelserne i det beståede array. Hvis du ikke sender nogen værdier i arrayet, kan Laravel ikke gøre dette where size IN ()
fordi det vil være syntaksfejl (du siger dybest set giv mig alle rækker, der matcher denne størrelse, men du passerer ikke størrelse). Så hvis arrayet er tomt, sætter det bare 0 = 1
.
For at fortælle Laravel, at hvis ingen størrelse er bestået, skal du ikke tilføje betingelse for størrelsen, skal du blot sætte et tjek før det.
$product = new Product;
if (!empty($sizes)) {
$product = $product->whereIn('size', $sizes);
}
$products = $product->get();
Btw denne adfærd er et hotfix
. I tidligere versioner af Laravel, hvis du passerer et tomt array, har du lige fået en undtagelse for en syntaksfejl. Nu håndteres det ved blot at sætte 1 = 0