sql >> Databasteknik >  >> RDS >> Mysql

Flera var i

Detta är mycket intressant fråga.

0 =1 kommer alltid att vara falskt, så din fråga returnerar noll rader. Men varför är detta?

Eftersom genom att ställa in

->whereIn('size', $size)

Laravel antar att du alltid vill att de returnerade raderna ska ha en av storlekarna i den passerade arrayen. Om du inte skickar några värden i arrayen kan Laravel inte göra detta where size IN () eftersom det kommer att vara syntaxfel (du säger i princip ge mig alla rader som matchar denna storlek, men du klarar inte storleken). Så om arrayen är tom sätter den bara 0 = 1 .

För att tala om för Laravel, om ingen storlek har godkänts, att inte lägga till villkor för storlek är det bara att sätta en enkel bock innan det.

$product = new Product;

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

$products = $product->get();

Btw detta beteende är en snabbkorrigering . I tidigare versioner av Laravel, om du passerar en tom array fick du precis ett undantag för ett syntaxfel. Nu hanteras det genom att bara ställa in 1 = 0




  1. Oracle med nod-oracle:Fel vid försök att hämta text för fel ORA-01804

  2. Begränsning i MYSQL-tabellen?

  3. Använder 'slut' som kolumnnamn i Ruby on Rails (MySQL)

  4. JdbcTemplate - Infoga eller uppdatera Oracle BLOB med SQL MERGE