我有以下原始 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'
日期是php中的变量$date。
我如何将这个原始 SQL 查询“转换”为 Yii2 QueryBuilder?
[更新]
正如 Felipe 提到的那样,查询构建器是不可能的,所以我最终按照以下方式进行操作:
$today = date('Y-m-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 注入(inject))
\Yii::$app->db->createCommand('update user set status = :status where age > 30')->bindValue(':status','1')->execute();
更新() 方法
// update user set status = 1 where age > 30 \Yii::$app->db->createCommand()->update('user', ['status' => 1], 'age > 30')->execute();
更多信息在这里:
关于php - Yii2 QueryBuilder 更新与加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28651195/