Yii使用DeleteAll连表删除出现报错问题的解决方法


Posted in PHP onJuly 14, 2016

本文实例讲述了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框架的PHP程序设计有所帮助。

PHP 相关文章推荐
example2.php
Oct 09 PHP
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
Zend framework处理一个http请求的流程分析
Feb 08 PHP
PHP连接Access数据库的方法小结
Jun 20 PHP
如何使用php输出时间格式
Aug 31 PHP
php去除HTML标签实例
Nov 06 PHP
php使用pdo连接报错Connection failed SQLSTATE的解决方法
Dec 15 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
Smarty分页实现方法完整实例
May 11 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
Apr 12 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
May 27 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 PHP
Yii+MYSQL锁表防止并发情况下重复数据的方法
Jul 14 #PHP
Yii实现的多级联动下拉菜单
Jul 13 #PHP
YII视图整合kindeditor扩展的方法
Jul 13 #PHP
Yii+upload实现AJAX上传图片的方法
Jul 13 #PHP
Yii安装与使用Excel扩展的方法
Jul 13 #PHP
Yii配置与使用memcached缓存的方法
Jul 13 #PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 #PHP
You might like
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
PHP获取某个月最大天数(最后一天)的方法
2015/07/29 PHP
javascript 写类方式之三
2009/07/05 Javascript
input标签内容改变的触发事件介绍
2014/06/18 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
JavaScript实现事件的中断传播和行为阻止方法示例
2017/01/20 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
jQuery插件HighCharts实现2D柱状图、折线图的组合多轴图效果示例【附demo源码下载】
2017/03/09 Javascript
基于Vue实现后台系统权限控制的示例代码
2017/08/29 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
Python操作sqlite3快速、安全插入数据(防注入)的实例
2014/04/26 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
Django 自定义分页器的实现代码
2019/11/24 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
Django权限控制的使用
2021/01/07 Python
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
中科前程Java笔试题
2016/11/20 面试题
电子商务专业推荐信范文
2013/12/02 职场文书
模具专业自荐信
2014/05/29 职场文书
房屋过户委托书范本
2014/10/07 职场文书
2014年底工作总结
2014/12/15 职场文书
导师鉴定意见
2015/06/05 职场文书
廉洁自律证明
2015/06/24 职场文书
对Golang中的FORM相关字段理解
2021/05/02 Golang
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
idea下配置tomcat避坑详解
2022/04/12 Servers