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

Yii2 - tham gia trái với nhiều điều kiện

Tôi tin rằng một trong những giải pháp này là tốt hơn. Thay vì sử dụng các truy vấn thô như leftJoin bạn nên bổ sung joinWith của mình quan hệ với andOnCondition (bổ sung các điều kiện cần thiết vào câu lệnh tham gia của bạn).

$products = Product::find()
    ->joinWith(['metaData' => function (ActiveQuery $query) {
        return $query
            ->andWhere(['=', 'meta_data.published_state', 1]);
    }])
    ->joinWith(['availability' => function (ActiveQuery $query) {
        return $query
            ->andOnCondition(['>=', 'availability.start', strtotime('+7 days')])
            ->andWhere(['IS', 'availability.ID', NULL]);
    }])
    ->all();

Ngoài ra, nó trông gọn gàng hơn khi bạn viết where mệnh đề quan hệ bên trong. Nó hoạt động giống như viết nó bên ngoài (nếu tôi không nhầm), nhưng khi cấu trúc lại truy vấn của bạn, bạn có thể dễ dàng xóa toàn bộ quan hệ mà không quên các điều kiện quan hệ bên ngoài.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn lồng nhau trong nút js bằng cách sử dụng mysql

  2. SQL đếm tất cả các hàng thay vì đếm các hàng riêng lẻ

  3. Tôi có thể tạo cơ sở dữ liệu bằng PDO trong PHP không?

  4. Tại sao MySQL định dạng lại hoàn toàn văn bản truy vấn XEM?

  5. Ngày giờ mới nhất từ ​​chỉ mục mysql duy nhất