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

Yii2 – lewe dołączenie pod warunkiem wielokrotnym

Uważam, że to jest lepsze rozwiązanie. Zamiast używać surowych zapytań, takich jak leftJoin powinieneś uzupełnić swoje joinWith relacje z andOnCondition (co dodaje potrzebne warunki gdzie do oświadczenia dołączenia).

$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();

Ponadto wygląda czyściej, gdy piszesz where klauzule wewnątrz relacji. Działa to tak samo, jak pisanie go na zewnątrz (jeśli się nie mylę), ale podczas refaktoryzacji zapytania możesz łatwo usunąć całą relację, nie zapominając o warunkach relacji na zewnątrz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mysqldump obsługuje pasek postępu?

  2. Problem z instalacją Ruby on Rails - Jak korzystać z instalacji WAMP MySQL?

  3. Kiedy muszę zakończyć połączenie mysqli (baza danych)?

  4. Przenoszenie danych między bazami MySQL i Oracle

  5. Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo homebrew