Mysql
 sql >> база данни >  >> RDS >> Mysql

Yii2 - ляво присъединяване при множество условия

Вярвам, че това е по-доброто решение. Вместо да използвате необработени заявки като leftJoin трябва да допълните своя joinWith отношения с andOnCondition (което добавя необходими условия към вашето изявление за присъединяване).

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

Освен това изглежда по-чисто, когато напишете where клаузи вътре в отношенията. Работи по същия начин като записването му отвън (ако не греша), но когато рефакторирате заявката си, можете лесно да изтриете цялата релация, без да забравяте условията на релацията отвън.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как работи функцията REGEXP_LIKE() в MySQL

  2. Пускане на уникален ключ в много колони, без да пускате външен ключ?

  3. Използване на SQLAlchemy ORM за непървичен ключ, уникален, автоматично нарастващ идентификатор

  4. Присъединяване на колони от различен тип?

  5. Как да изтрия таблица от mysqldump