Mysql
 sql >> Base de données >  >> RDS >> Mysql

Emplacement multiple

C'est une question très intéressante.

0 =1 sera toujours faux, donc votre requête renverra zéro ligne. Mais pourquoi est-ce?

Parce qu'en définissant

->whereIn('size', $size)

Laravel suppose que vous voulez toujours que les lignes renvoyées aient l'une des tailles du tableau passé. Si vous ne transmettez aucune valeur dans le tableau, Laravel ne peut pas le faire where size IN () car ce sera une erreur de syntaxe (vous dites en gros donnez-moi toutes les lignes qui correspondent à cette taille, mais vous ne transmettez pas la taille). Donc, dans le cas où le tableau est vide, il met simplement 0 = 1 .

Afin de dire à Laravel, si aucune taille n'est transmise, de ne pas ajouter de condition pour la taille, il suffit de mettre une simple vérification avant cela.

$product = new Product;

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

$products = $product->get();

Au fait, ce comportement est un correctif . Dans les versions précédentes de Laravel, si vous passiez un tableau vide, une exception venait d'être levée pour une erreur de syntaxe. Maintenant, il est géré en définissant simplement 1 = 0