Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nhiều nơi trong

Đây là một câu hỏi rất thú vị.

0 =1 sẽ luôn là false, vì vậy truy vấn của bạn sẽ trả về 0 hàng. Nhưng tại sao lại thế này?

Bởi vì bằng cách thiết lập

->whereIn('size', $size)

Laravel giả định rằng bạn luôn muốn các hàng trả về có một trong các kích thước trong mảng đã truyền. Nếu bạn không chuyển bất kỳ giá trị nào trong mảng, Laravel không thể thực hiện việc này where size IN () bởi vì nó sẽ là lỗi cú pháp (về cơ bản bạn nói cung cấp cho tôi tất cả các hàng phù hợp với kích thước này, nhưng bạn không vượt qua kích thước). Vì vậy, trong trường hợp mảng trống, nó chỉ đặt 0 = 1 .

Để nói với Laravel, nếu không có kích thước nào được thông qua, để không thêm điều kiện cho kích thước, chỉ cần đặt một kiểm tra đơn giản trước đó.

$product = new Product;

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

$products = $product->get();

Btw hành vi này là một hotfix . Trong các phiên bản trước của Laravel, nếu bạn chuyển mảng trống, bạn chỉ có một ngoại lệ được đưa ra do lỗi cú pháp. Bây giờ nó được xử lý chỉ bằng cách thiết lập 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. tạo cơ sở dữ liệu trong mysql từ java

  2. Không thể quyết định xem chuẩn hóa hay không chuẩn hóa sẽ hoạt động

  3. Cú pháp CẬP NHẬT SQL - Được DBMS liệt kê

  4. Django:mysql:1045, Quyền truy cập bị từ chối đối với người dùng

  5. Thay đổi định dạng ngày MYSQL