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