sql >> Base de Datos >  >> RDS >> Mysql

Múltiples dónde en

Esta es una pregunta muy interesante.

0 =1 siempre será falso, por lo que su consulta devolverá cero filas. Pero ¿por qué es esto?

Porque al establecer

->whereIn('size', $size)

Laravel asume que siempre desea que las filas devueltas tengan uno de los tamaños en la matriz pasada. Si no pasa ningún valor en la matriz, Laravel no puede hacer esto where size IN () porque será un error de sintaxis (básicamente dices dame todas las filas que coincidan con este tamaño, pero no pasas el tamaño). Entonces, en caso de que la matriz esté vacía, solo pone 0 = 1 .

Para decirle a Laravel, si no se pasa el tamaño, que no agregue la condición para el tamaño, simplemente marque antes de eso.

$product = new Product;

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

$products = $product->get();

Por cierto, este comportamiento es un hotfix . En versiones anteriores de Laravel, si pasa una matriz vacía, acaba de lanzar una excepción por un error de sintaxis. Ahora se maneja simplemente configurando 1 = 0