php - Yii2 QueryBuilder 更新与加入

标签 php mysql yii2

我有以下原始 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/

相关文章:

mysql - 从 COALESCE 中减去

php - 构建比较字符串相似度的推荐系统

php - Yii2:对 GridView 中的关系计数列进行排序

php - 如何导出 Moodle 中所有类(class)的所有成绩?

php - Mysql 连接三个表时出错

php - 如何使用 PHP 加密 HTML 源代码输出

javascript - WordPress 的 wp_enqueue_script 问题

php - 如何从一个表中选择字段并按另一个表中的字段排序

php - Yii2 #403 错误仅在 IE 中出现,并且在兼容性 View 模式打开时也会出现

php - 强制 Yii 2 在 ActiveRecord 模型保存上使用准备好的语句