Yii使用DeleteAll连表删除出现报错问题的解决方法
2016-07-14 09:48
936 查看
删除数据的时候,经常会遇到连联判断删除数据的条件,今天用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为:
正确SQL语句应为:
追溯到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相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
您可能感兴趣的文章:
相关文章推荐
- 打印机无法响应的解决方法第1/2页
- 解决Mysql服务器启动时报错问题的方法
- C#提示:“在证书存储区中找不到清单签名证书”的解决方法
- Internet Explorer 8 beta 中文版与IE7共存的解决方法
- Oracle数据更改后出错的解决方法
- android @override 报错解决方案
- ON_COMMAND_RANGE多个按钮响应一个函数的解决方法
- VB的32位程序在64位系统中出现文件和注册表自动转向的解决方法
- YII Framework框架教程之安全方案详解
- php采用curl访问域名返回405 method not allowed提示的解决方法
- Yii PHP Framework实用入门教程(详细介绍)
- PHP提示Cannot modify header information - headers already sent by解决方法
- 编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
- php运行提示:Fatal error Allowed memory size内存不足的解决方法
- php5.3提示Function ereg() is deprecated Error问题解决方法
- PHP的Yii框架中Model模型的学习教程
- 详解PHP的Yii框架中自带的前端资源包的使用
- C#控件闪烁的解决方法
- php出现web系统多域名登录失败的解决方法
- 一些Asp技巧和实用解决方法