sql >> Database >  >> RDS >> Mysql

Meerdere Waar In

Dit is een zeer interessante vraag.

0 =1 is altijd onwaar, dus uw zoekopdracht retourneert nul rijen. Maar waarom is dit?

Want door in te stellen

->whereIn('size', $size)

Laravel gaat ervan uit dat u altijd wilt dat de geretourneerde rijen een van de grootten in de doorgegeven array hebben. Als u geen waarden in de array doorgeeft, kan Laravel dit niet doen where size IN () omdat het een syntaxisfout zal zijn (je zegt eigenlijk:geef me alle rijen die overeenkomen met deze grootte, maar je geeft de grootte niet door). Dus in het geval dat de array leeg is, zet het gewoon 0 = 1 .

Om Laravel te vertellen dat als er geen maat wordt doorgegeven, om geen voorwaarde voor maat toe te voegen, plaats je gewoon een eenvoudig vinkje daarvoor.

$product = new Product;

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

$products = $product->get();

Trouwens, dit gedrag is een hotfix . In eerdere versies van Laravel, als je een lege array doorgeeft, kreeg je net een uitzondering voor een syntaxisfout. Nu wordt het afgehandeld door gewoon 1 = 0 in te stellen




  1. Correct opgemaakte MySQL date insert statement retourneert alle nullen

  2. GCC installeren op Oracle Solaris 11

  3. Gebruik MySQL ruimtelijke extensies om punten binnen een cirkel te selecteren

  4. Hulp bij:ERROR 1025 (HY000):Fout bij hernoemen van .... (errno:150)