sql >> Database teknologi >  >> RDS >> Mysql

Multiple Where In

Dette er meget interessant spørgsmål.

0 =1 vil altid være falsk, så din forespørgsel vil returnere nul rækker. Men hvorfor er dette?

Fordi ved at indstille

->whereIn('size', $size)

Laravel antager, at du altid ønsker, at de returnerede rækker skal have en af ​​størrelserne i det beståede array. Hvis du ikke sender nogen værdier i arrayet, kan Laravel ikke gøre dette where size IN () fordi det vil være syntaksfejl (du siger dybest set giv mig alle rækker, der matcher denne størrelse, men du passerer ikke størrelse). Så hvis arrayet er tomt, sætter det bare 0 = 1 .

For at fortælle Laravel, at hvis ingen størrelse er bestået, skal du ikke tilføje betingelse for størrelsen, skal du blot sætte et tjek før det.

$product = new Product;

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

$products = $product->get();

Btw denne adfærd er et hotfix . I tidligere versioner af Laravel, hvis du passerer et tomt array, har du lige fået en undtagelse for en syntaksfejl. Nu håndteres det ved blot at sætte 1 = 0




  1. Docker venter på, at postgresql kører

  2. GROUP_CONCAT() rækkeantal ved gruppering efter et tekstfelt

  3. Hvordan kan jeg kopiere en enkelt række/post fra en MySQL-instans til en anden?

  4. Sådan håndteres flere objekter ved at bruge Objekt Explorer Detail Windows i SSMS - SQL Server / TSQL Tutorial Del 22