Dit is een zeer interessante vraag.
0 =1 is altijd onwaar, dus uw zoekopdracht retourneert nul rijen. Maar waarom is dit?
Want door in te stellen
->whereIn('size', $size)
Laravel gaat ervan uit dat u altijd wilt dat de geretourneerde rijen een van de grootten in de doorgegeven array hebben. Als u geen waarden in de array doorgeeft, kan Laravel dit niet doen where size IN ()
omdat het een syntaxisfout zal zijn (je zegt eigenlijk:geef me alle rijen die overeenkomen met deze grootte, maar je geeft de grootte niet door). Dus in het geval dat de array leeg is, zet het gewoon 0 = 1
.
Om Laravel te vertellen dat als er geen maat wordt doorgegeven, om geen voorwaarde voor maat toe te voegen, plaats je gewoon een eenvoudig vinkje daarvoor.
$product = new Product;
if (!empty($sizes)) {
$product = $product->whereIn('size', $sizes);
}
$products = $product->get();
Trouwens, dit gedrag is een hotfix
. In eerdere versies van Laravel, als je een lege array doorgeeft, kreeg je net een uitzondering voor een syntaxisfout. Nu wordt het afgehandeld door gewoon 1 = 0
in te stellen