2012-02-20 16 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:今、私はdeleteProjectを使用して、プロジェクトを削除したいとき

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, 
    ) 
); 

()メソッドをModel_Table_Projectに追加すると、Projectテーブルとentのエントリが削除されますProjectStageテーブルでは削除されますが、ステージテーブルのエントリは削除されません。

私は間違っていますか?

答えて

0

解決策を見つけました。それは自分自身の思考ミスでした。私は$行優先を呼び出す表モデル>(削除で

)と行モデルに私はdeleteメソッド宣言:私が今使っソリューションです

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

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

    return parent::delete(); 
} 

それは最初にすべての関連する段階を削除し、この方法はそれを削除します。