Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mehrere Wo In

Das ist eine sehr interessante Frage.

0 =1 ist immer falsch, sodass Ihre Abfrage null Zeilen zurückgibt. Aber warum ist das so?

Denn durch die Einstellung

->whereIn('size', $size)

Laravel geht davon aus, dass die zurückgegebenen Zeilen immer eine der Größen im übergebenen Array haben sollen. Wenn Sie keine Werte im Array übergeben, kann Laravel dies nicht tun where size IN () weil es ein Syntaxfehler sein wird (Sie sagen im Grunde, geben Sie mir alle Zeilen, die dieser Größe entsprechen, aber Sie übergeben keine Größe). Falls das Array also leer ist, setzt es einfach 0 = 1 .

Um Laravel mitzuteilen, dass keine Bedingung für die Größe hinzugefügt werden soll, wenn keine Größe übergeben wird, setzen Sie einfach ein einfaches Häkchen davor.

$product = new Product;

if (!empty($sizes)) {
    $product = $product->whereIn('size', $sizes);
}

$products = $product->get();

Übrigens ist dieses Verhalten ein Hotfix . In früheren Versionen von Laravel wurde beim Übergeben eines leeren Arrays nur eine Ausnahme für einen Syntaxfehler ausgelöst. Jetzt wird es gehandhabt, indem einfach 1 = 0 gesetzt wird