これは非常に興味深い質問です。
0 =1は常にfalseになるため、クエリはゼロ行を返します。しかし、これはなぜですか?
設定することで
->whereIn('size', $size)
Laravelは、返される行が、渡された配列のいずれかのサイズになるようにすることを常に想定しています。配列に値を渡さない場合、Laravelはこれを行うことができませんwhere size IN ()
構文エラーになるためです(基本的に、このサイズに一致するすべての行を指定しますが、サイズを渡しません)。したがって、配列が空の場合は、0 = 1
を入力するだけです。 。
Laravelにサイズが渡されない場合、サイズの条件を追加しないようにするには、その前に簡単なチェックを入れてください。
$product = new Product;
if (!empty($sizes)) {
$product = $product->whereIn('size', $sizes);
}
$products = $product->get();
ところで、この動作はホットフィックス
です。 。以前のバージョンのLaravelでは、空の配列を渡すと、構文エラーのために例外がスローされていました。 1 = 0
を設定するだけで処理できるようになりました