Yii2 QueryBuilder Update with Join

У меня есть следующий необработанный SQL-запрос:

UPDATE `pay_audit` JOIN `invoice_items` ON `invoice_items`.`mdn` = `pay_audit`.`account_id` AND `invoice_items`.`unitprice` = `pay_audit`.`payment` AND `invoice_items`.`producttype_name` LIKE 'PAYMENT' AND DATE_FORMAT(`invoice_items`.`created`, '%Y-%m-%d') = '2015-02-21' SET `pay_audit`.`invoice_item_id` = `invoice_items`.`id` WHERE `pay_audit`.`report_date` = '2015-02-21' 

Дата – это переменная $ date в php.

Как я могу «преобразовать» этот необработанный SQL-запрос в Yii2 QueryBuilder?

[ОБНОВИТЬ]

Поскольку Фелипе упомянул, что это невозможно с построителем запросов, поэтому я закончил делать это, как показано ниже:

  $today = date('Ym-d'); $sql = ""; $sql .= "UPDATE `pay_audit` "; $sql .= "JOIN `invoice_items` "; $sql .= "ON `invoice_items`.`mdn` = `pay_audit`.`account_id` "; $sql .= "AND `invoice_items`.`unitprice` = `qpay_audit`.`payment` "; $sql .= "AND `invoice_items`.`producttype_name` LIKE 'PAYMENT' "; $sql .= "AND DATE_FORMAT(`invoice_items`.`created`, '%Y-%m-%d') = '$today' "; $sql .= "SET `pay_audit`.`invoice_item_id` = `invoice_items`.`id` "; $sql .= "WHERE `pay_audit`.`report_date` = '$today'"; $command = \Yii::$app->db->createCommand($sql); $command->execute(); 

Я боюсь, что Yii 2 Query Builder предназначен только для избранных запросов .

Для запросов обновлений у вас есть как минимум три варианта:

  • Исходный SQL:

     \Yii::$app->db->createCommand('update user set status = 1 where age > 30')->execute(); 
  • Необработанный SQL с заполнителями (для предотвращения внедрения SQL)

     \Yii::$app->db->createCommand('update user set status = :status where age > 30')->bindValue(':status','1')->execute(); 
  • метод update ()

     // update user set status = 1 where age > 30 \Yii::$app->db->createCommand()->update('user', ['status' => 1], 'age > 30')->execute(); 

Подробнее здесь:

  • Yii DAO

  • Другой вопрос о SO