Yii-- DeleteAll连表删除报错问题的解决方法
删除数据的时候,经常会遇到连联判断删除数据的条件,今天用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连表删除报错问题的解决方法相关推荐
- php zpo框架,Yii使用DeleteAll连表删除出现报错问题的解决方法
本文实例讲述了Yii使用DeleteAll连表删除出现报错问题的解决方法.分享给大家供大家参考,具体如下: 删除数据的时候,经常会遇到连联判断删除数据的条件,今天用Yii 的CDbCriteria生成 ...
- mysql 启动服务1067_windows无法启动MySQL服务报错1067的解决方法
突然登陆MySQL时,出现禁止访问或者无法连接到数据库,回到服务,去打开wampmysqld ,发现 "windows无法启动MySQL服务 错误1067" ,死活启动不了,咋办? ...
- win11安装报错0xc1900101怎么办 Windows11安装报错0xc1900101的解决方法
自己的电脑升级到win11操作系统的时候都会遇到win11系统安装出错了,出现错误代码0xc1900101的问题,导致我们无法安装新系统,下面来看看win11安装报错0xc1900101的解决方法吧. ...
- Python发送邮件smtplib.SMTP各报错问题的解决方法
Python发送邮件smtplib.SMTP各报错问题的解决方法 参考文章: (1)Python发送邮件smtplib.SMTP各报错问题的解决方法 (2)https://www.cnblogs.co ...
- Eslint报错整理与解决方法(持续整理)
Eslint报错整理与解决方法(持续整理) 参考文章: (1)Eslint报错整理与解决方法(持续整理) (2)https://www.cnblogs.com/lunlunshiwo/p/859600 ...
- 登录mysql报错2059_navicat连接mysql报错2059的解决方法
navicat连接mysql报错2059的解决方法 发布时间:2020-12-21 10:27:37 来源:亿速云 阅读:82 作者:小新 栏目:数据库 这篇文章给大家分享的是有关navicat连接m ...
- cobbler安装4个报错汇总及解决方法:ImportError
cobbler安装4个报错汇总及解决方法:ImportError 参考文章: (1)cobbler安装4个报错汇总及解决方法:ImportError (2)https://www.cnblogs.co ...
- 安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法
安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决方法 参考文章: (1)安装apk报错INSTALL_FAILED_UPDATE_INCOMPATIBLE的解决 ...
- eslint 验证vue文件 报错 unexpected token =解决方法
eslint 验证vue文件 报错 unexpected token =解决方法 参考文章: (1)eslint 验证vue文件 报错 unexpected token =解决方法 (2)https: ...
最新文章
- 考研计算机专业课怎么复习,2016考研计算机专业课如何复习?
- qq发文件大小上限_微信又放大招!网友:QQ可以卸载了?
- mybatis中传入String类型参数异常
- android跳转到打电话,Android 应用跳转到拨打电话界面或qq进行聊天(qq咨询)
- Python进阶04 函数的参数对应
- 云计算基础知识:CPU虚拟化
- TS字面量进行类型声明
- java 将bean转化为map,将javabean转化为map对象
- 同济大学 线性代数 第六版 pdf_同济大学版工程数学 线性代数 第六版 课本
- 结构体Sqlist L与Sqlist L的区别
- dell服务器pe系统安装win7系统,dell戴尔pe重装win7系统
- css文字超出范围用省略号代替
- CSDN2018博客之星评选结果预测第二弹
- 用rest造句子_rest造句
- C讲坛之猜数字游戏的实现
- 动漫,简史早期的日本动画
- 谁会买下Delphi?
- 2019年3月5日-MPU9250使用(二)
- 【Oracle篇】Oracle的客户端工具
- OLE技术专题——第二讲:复合文件