Zend - Doctrine删除级联

时间:2011-11-14 21:02:36

标签: mysql zend-framework doctrine cascading-deletes

我希望有人可以帮忙解决这个问题。请

我有两个一对一关系的表:A和B.我试图在教义模型中建议使用删除级联。

基本上在我的控制器id中执行此操作:

$q = Doctrine_Query::create()
        ->delete('Tcc_Model_A i')
        ->whereIn('i.A_ID', $input->ids);
  $result = $q->execute();  

我的模特我有这个:

 $this->hasMany('Tcc_Model_B', array(
            'local' => 'A_ID',
            'foreign' => 'B_ID',
            'cascade' => 'delete'
                )
            );

即使正确删除了Tcc_Model_A中的主键,外键(B_ID)也不会。有人知道我做错了什么吗?提前感谢您提供任何帮助。 F。

2 个答案:

答案 0 :(得分:2)

不要尝试在应用程序代码中强制执行级联操作。应用程序代码无法以原子方式执行这些操作。

通过在数据库中声明FOREIGN KEY...ON DELETE CASCADE约束来实现级联操作。它们必须由RDBMS处理。


重新评论:

外键可以为级联更新和删除提供支持,并且它们以原子方式运行,因此对父表和从属表的更改一起发生。

ALTER TABLE Tcc_Model_B ADD FOREIGN KEY (B_ID) 
  REFERENCES Tcc_Model_A(A_ID)
  ON DELETE CASCADE;

请参阅http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

答案 1 :(得分:0)

如果使用Doctrine 2,则通过使用 onDelete =“cascade”选项配置 @JoinColumn ,支持 ON DELETE CASCADE