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删除将当前主表作为从表的主表数据
