Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wiele Gdzie In

To bardzo interesujące pytanie.

0 =1 zawsze będzie fałszywe, więc zapytanie zwróci zero wierszy. Ale dlaczego tak jest?

Ponieważ ustawiając

->whereIn('size', $size)

Laravel zakłada, że ​​zawsze chcesz, aby zwracane wiersze miały jeden z rozmiarów w przekazanej tablicy. Jeśli nie przekazujesz żadnych wartości w tablicy, Laravel nie może tego zrobić where size IN () ponieważ będzie to błąd składni (w zasadzie mówisz, że dasz mi wszystkie wiersze, które pasują do tego rozmiaru, ale nie przekazujesz rozmiaru). Tak więc w przypadku, gdy tablica jest pusta, po prostu umieszcza 0 = 1 .

Aby poinformować Laravela, że ​​jeśli żaden rozmiar nie zostanie przekazany, aby nie dodawać warunku dla rozmiaru, po prostu przed tym sprawdź.

$product = new Product;

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

$products = $product->get();

Btw to zachowanie jest poprawką . W poprzednich wersjach Laravela, jeśli przekażesz pustą tablicę, po prostu zgłoszony został wyjątek dotyczący błędu składni. Teraz jest obsługiwane przez ustawienie 1 = 0




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dowolna biblioteka JavaScript/Jquery Aby sprawdzić poprawność instrukcji SQL?

  2. Problem LAG/LEAD MySQL

  3. Jak programowo tworzyć bazy danych MySQL na współdzielonych planach hostingowych Linux

  4. Poprawa wydajności MySQL w zapytaniu jednorazowym z dużym zbiorem danych

  5. Skrypty startowe mySQL nie działają z docker-compose