2012-02-20 4 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에 추가하면 프로젝트 테이블과 엔트리가 삭제됩니다 ProjectStage 테이블에 있지만 Stage 테이블의 항목은 삭제되지 않습니다.

내가 뭘 잘못하고 있니?

답변

0

해결책을 찾았습니다. 그것은 나 자신의 생각 오류였다. 나는 $ 로우 - 전화 테이블 모델> (삭제에서

)과 행 모델에서 내가 삭제 방법 선언 : 지금 사용하는 솔루션입니다

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

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

    return parent::delete(); 
} 

먼저 모든 관련 단계를 삭제이 방법을 그런 다음 자신을 삭제합니다.