本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
本文向大家介绍解决Python出现_warn_unsafe_extraction问题的方法,包括了解决Python出现_warn_unsafe_extraction问题的方法的使用技巧和注意事项,需要的朋友参考一下 在Python项目中运行出现了“AttributeError: ResourceManager instance has no attribute ‘_warn_unsafe_extr
本文向大家介绍安装使用Vmware出现的问题及解决方法,包括了安装使用Vmware出现的问题及解决方法的使用技巧和注意事项,需要的朋友参考一下 虚拟机正在使用或无法连接到 报类似如下错误时 解决方案 首先进入该页面获得虚拟机所在位置 删除.ick后缀的文件,该文件应该是保存了虚拟机上次运行时的运行状态 然后Ctrl+Alt+Delete键打开任务管理器,键盘敲入v快速查找和Vmware相关的进程,
本文向大家介绍Java pom.xml parent引用报错问题解决方案,包括了Java pom.xml parent引用报错问题解决方案的使用技巧和注意事项,需要的朋友参考一下 问题如下 本质就是jar包引用不到,这个时候就要需要去windows-preferences-Maven-user settings中查看jar包存放在本地的那个仓库之中 我存放的是D:\tools\study_tool
本文向大家介绍解决SpringMVC使用@RequestBody注解报400错误的问题,包括了解决SpringMVC使用@RequestBody注解报400错误的问题的使用技巧和注意事项,需要的朋友参考一下 一般使用@RequestBody接收的时候报400都是传入的json字符串和对应封装的对象不对应造成的 首先要注意 封装的对象中的字段类型有没有Date类型或者int等类型的,如果有的话,在s
本文向大家介绍C#中Datetimepicker出现问题的解决方法,包括了C#中Datetimepicker出现问题的解决方法的使用技巧和注意事项,需要的朋友参考一下 发现问题 DateTimePicker控件是用来显示和修改日期时间的,但默认只显示日期和修改日期。最近在使用中就遇到了一个问题,下面来随着小编一起看看吧 前几天公司用的物料管理系统出现了一个很奇怪的问题 具体的现象是: 10月31号
本文向大家介绍解决wx.onMenuShareTimeline出现的问题,包括了解决wx.onMenuShareTimeline出现的问题的使用技巧和注意事项,需要的朋友参考一下 wx.onMenuShareTimeline使用注意事项 我在开发测试过程中,发现使用wx.onMenuShareTimeline无效果,没有显示我定义的图片、title和链接,经过调试发现原因如下: 1.图片大小要大于