删除数据的时候,经常会遇到连联判断删除数据的条件,今天用Yii 的CDbCriteria生成关连条件。批量删除的时候数据库报错。

页面代码为

$criteria=new CDbCriteria;
$criteria->join = ' LEFT JOIN {{positions}} p ON p.zpo_id=t.zpo_id ';
$criteria->addCondition("p.zpo_type=1");
$criteria->addCondition("t.zpl_content_id in ($id)");
PosLog::model()->deleteAll($criteria);

错误SQL为

DELETE FROM `zd_pos_log` LEFT JOIN zd_positions p ON p.zpo_id=t.zpo_id WHERE (p.zpo_type=1) AND (t.zpl_content_id in (76))

正确SQL语句应为

DELETE t FROM `zd_pos_log` t LEFT JOIN zd_positions p ON p.zpo_id=t.zpo_id WHERE (p.zpo_type=1) AND (t.zpl_content_id in (76))

追溯到Yii 基类

 framework/db/schema/CDbCommandBuilder.php#166
public function createDeleteCommand($table,$criteria)
{$this->ensureTable($table);$sql="DELETE FROM {$table->rawName}";$sql=$this->applyJoin($sql,$criteria->join);$sql=$this->applyCondition($sql,$criteria->condition);$sql=$this->applyGroup($sql,$criteria->group);$sql=$this->applyHaving($sql,$criteria->having);$sql=$this->applyOrder($sql,$criteria->order);$sql=$this->applyLimit($sql,$criteria->limit,$criteria->offset);$command=$this->_connection->createCommand($sql);$this->bindValues($command,$criteria->params);return $command;
}

解决方案。修改基类方法

public function createDeleteCommand($table,$criteria,$alias='t')
{$this->ensureTable($table);$alias=$this->_schema->quoteTableName($alias);if(empty($criteria->join)){$sql="DELETE FROM {$table->rawName}";}else{$sql="DELETE $alias FROM {$table->rawName} $alias";}$sql=$this->applyJoin($sql,$criteria->join);$sql=$this->applyCondition($sql,$criteria->condition);$sql=$this->applyGroup($sql,$criteria->group);$sql=$this->applyHaving($sql,$criteria->having);$sql=$this->applyOrder($sql,$criteria->order);$sql=$this->applyLimit($sql,$criteria->limit,$criteria->offset);$command=$this->_connection->createCommand($sql);$this->bindValues($command,$criteria->params);return $command;
}

Yii-- DeleteAll连表删除报错问题的解决方法相关推荐

  1. php zpo框架,Yii使用DeleteAll连表删除出现报错问题的解决方法

    本文实例讲述了Yii使用DeleteAll连表删除出现报错问题的解决方法.分享给大家供大家参考,具体如下: 删除数据的时候,经常会遇到连联判断删除数据的条件,今天用Yii 的CDbCriteria生成 ...

  2. mysql 启动服务1067_windows无法启动MySQL服务报错1067的解决方法

    突然登陆MySQL时,出现禁止访问或者无法连接到数据库,回到服务,去打开wampmysqld ,发现 "windows无法启动MySQL服务 错误1067" ,死活启动不了,咋办? ...

  3. win11安装报错0xc1900101怎么办 Windows11安装报错0xc1900101的解决方法

    自己的电脑升级到win11操作系统的时候都会遇到win11系统安装出错了,出现错误代码0xc1900101的问题,导致我们无法安装新系统,下面来看看win11安装报错0xc1900101的解决方法吧. ...

  4. Python发送邮件smtplib.SMTP各报错问题的解决方法

    Python发送邮件smtplib.SMTP各报错问题的解决方法 参考文章: (1)Python发送邮件smtplib.SMTP各报错问题的解决方法 (2)https://www.cnblogs.co ...

  5. Eslint报错整理与解决方法(持续整理)

    Eslint报错整理与解决方法(持续整理) 参考文章: (1)Eslint报错整理与解决方法(持续整理) (2)https://www.cnblogs.com/lunlunshiwo/p/859600 ...

  6. 登录mysql报错2059_navicat连接mysql报错2059的解决方法

    navicat连接mysql报错2059的解决方法 发布时间:2020-12-21 10:27:37 来源:亿速云 阅读:82 作者:小新 栏目:数据库 这篇文章给大家分享的是有关navicat连接m ...

  7. cobbler安装4个报错汇总及解决方法:ImportError

    cobbler安装4个报错汇总及解决方法:ImportError 参考文章: (1)cobbler安装4个报错汇总及解决方法:ImportError (2)https://www.cnblogs.co ...

  8. 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法

    安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法 参考文章: (1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决 ...

  9. eslint 验证vue文件 报错 unexpected token =解决方法

    eslint 验证vue文件 报错 unexpected token =解决方法 参考文章: (1)eslint 验证vue文件 报错 unexpected token =解决方法 (2)https: ...

最新文章

  1. 考研计算机专业课怎么复习,2016考研计算机专业课如何复习?
  2. qq发文件大小上限_微信又放大招!网友:QQ可以卸载了?
  3. mybatis中传入String类型参数异常
  4. android跳转到打电话,Android 应用跳转到拨打电话界面或qq进行聊天(qq咨询)
  5. Python进阶04 函数的参数对应
  6. 云计算基础知识:CPU虚拟化
  7. TS字面量进行类型声明
  8. java 将bean转化为map,将javabean转化为map对象
  9. 同济大学 线性代数 第六版 pdf_同济大学版工程数学 线性代数 第六版 课本
  10. 结构体Sqlist L与Sqlist L的区别
  11. dell服务器pe系统安装win7系统,dell戴尔pe重装win7系统
  12. css文字超出范围用省略号代替
  13. CSDN2018博客之星评选结果预测第二弹
  14. 用rest造句子_rest造句
  15. C讲坛之猜数字游戏的实现
  16. 动漫,简史早期的日本动画
  17. 谁会买下Delphi?
  18. 2019年3月5日-MPU9250使用(二)
  19. 【Oracle篇】Oracle的客户端工具
  20. OLE技术专题——第二讲:复合文件

热门文章

  1. dataguard类型转换与模式转化
  2. CCIE学习(4)——VLAN基础
  3. 用ASP+DLL实现WEB方式修改服务器时间
  4. vue-cli的项目文件说明
  5. jQuery中的css部分
  6. 赛门铁克调研发现越来越多的物联网设备被用于实施DDoS攻击
  7. (转)【重磅】无监督学习生成式对抗网络突破,OpenAI 5大项目落地
  8. linux shell中的单引号与双引号的区别(看完就不会有引号的疑问了)(转)
  9. 合并表格中同一列中相同的内容
  10. 求$N^N$的首位数字