2012-02-20 98 views
0

我使用默認的Zend_Db_Table_Abstract來設置關係。這是我的模型:Zend CASCADE上的多對多關係

Model_Table_Project:

protected $_name = 'projects'; 
protected $_dependentTables = array('Model_Table_ProjectStage'); 
protected $_referenceMap = array(
    'User' => array(
     'columns' => 'userId', 
     'refTableClass' => 'Model_Table_User', 
     'refColumns' => 'id' 
    ) 
); 

public function deleteProject($id) 
{ 
    $row = $this->find($id)->current(); 
    if ($row) 
    { 
     $row->delete(); 
    } 
    else 
    { 
     throw new Zend_Exception('Cannot delete project.'); 
    } 
} 

Model_Table_Stage:

protected $_name = 'stages'; 
protected $_dependentTables = array('Model_Table_ProjectStage'); 

Model_Table_ProjectStage:

protected $_name = 'projectstage'; 
protected $_referenceMap = array(
    'Project' => array(
     'columns' => 'projectId', 
     'refTableClass' => 'Model_Table_Project', 
     'refColumns' => 'id', 
     'onDelete' => self::CASCADE, 
    ), 
    'Stage' => array(
     'columns' => 'stageId', 
     'refTableClass' => 'Model_Table_Stage', 
     'refColumns' => 'id', 
     'onDelete' => self::CASCADE, 
    ) 
); 

現在,當我想刪除一個項目,使用deleteProject()方法在Model_Table_Project中刪除項目表中的條目和ent在ProjectStage表中,但它不會刪除Stage表中的條目。

我在做什麼錯?

回答

0

我找到了解決方案。這是我自己的一個思想錯誤。我現在用的解決方案是:

在表模式,我稱之爲$按行>刪除()和行模式,我申報了刪除方法:

public function delete() 
{ 
    $stages = $this->getStages(); 

    foreach ($stages as $stage) 
    { 
     $stage->delete(); 
    } 

    return parent::delete(); 
} 

這樣,它首先刪除所有與階段然後它自己刪除。