Detta är mycket intressant fråga.
0 =1 kommer alltid att vara falskt, så din fråga returnerar noll rader. Men varför är detta?
Eftersom genom att ställa in
->whereIn('size', $size)
Laravel antar att du alltid vill att de returnerade raderna ska ha en av storlekarna i den passerade arrayen. Om du inte skickar några värden i arrayen kan Laravel inte göra detta where size IN ()
eftersom det kommer att vara syntaxfel (du säger i princip ge mig alla rader som matchar denna storlek, men du klarar inte storleken). Så om arrayen är tom sätter den bara 0 = 1
.
För att tala om för Laravel, om ingen storlek har godkänts, att inte lägga till villkor för storlek är det bara att sätta en enkel bock innan det.
$product = new Product;
if (!empty($sizes)) {
$product = $product->whereIn('size', $sizes);
}
$products = $product->get();
Btw detta beteende är en snabbkorrigering
. I tidigare versioner av Laravel, om du passerar en tom array fick du precis ett undantag för ett syntaxfel. Nu hanteras det genom att bara ställa in 1 = 0