tp3.2.2关联删除问题,是bug么

浏览:2947 发布日期:2014/05/13
3.2.1 - 普通 - 未处理
情景:
1.has_many
2.删除one级联删除many
3.删除many级联删除one
4.数据库建立外键关联

实验1:
当我们建表的时候建立了外键关联即foreign key的时候,关联删除是无效的
tp的代码逻辑如下......
if(false === $this->_before_delete($options)) {
            return false;
        }        
        $result  =    $this->db->delete($options);
       if(false !== $result) {//这里如果设置了外键关联,并且我们先删除主表的数据实际上是无法删除成功的
            $data = array();
            if(isset($pkValue)) $data[$pk]   =  $pkValue;
            $this->_after_delete($data,$options);
        }
        // 返回删除记录个数
        return $result;
说明:
如果我们希望删除主表的时候删除从表的相关数据(one2many),如果在数据库上做了外键关联,那么tp的删除会失败,因为,tp的逻辑是先判断主表删除成功没有,删除成功了执行_after_delete方法,但是由于主表被从表关联了,所以主表先删除总是失败的,这就导致了无法删除
实验2:
先删从表再删主表,成功执行

建议:
tp的_before_delete方法是空函数体,如果不考虑事务的话,对于主从关系,主表先删的情况可以在这个方法里先删从回到delete方法删除当前对象,在到_after_delete删除将当前主表作为从表的主表数据
评论(
后面还有条评论,点击查看>>