Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Múltiplos Onde Em


Esta é uma pergunta muito interessante.

0 =1 sempre será falso, então sua consulta retornará zero linhas. Mas por que isso?

Porque ao definir
->whereIn('size', $size)

O Laravel assume que você sempre quer que as linhas retornadas estejam com um dos tamanhos do array passado. Se você não passar nenhum valor no array, o Laravel não pode fazer isso where size IN () porque será erro de sintaxe (você basicamente diz me dê todas as linhas que correspondem a esse tamanho, mas você não passa tamanho). Portanto, caso o array esteja vazio, ele apenas coloca 0 = 1 .

Para dizer ao Laravel, se nenhum tamanho for passado, para não adicionar condição para tamanho, basta fazer uma verificação simples antes disso.
$product = new Product;

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

$products = $product->get();

Aliás, esse comportamento é um hotfix . Nas versões anteriores do Laravel, se você passar um array vazio, você acabou de ter uma exceção lançada para um erro de sintaxe. Agora é tratado apenas definindo 1 = 0