2011-11-14 3 views
0

나는 누군가가 이것을 도울 수 있기를 바라고있다. 제발Zend - Doctrine delete cascade

나는 일대일 관계 : A와 B에서 두 개의 테이블을 가지고 있습니다. 교리 모델에서 권고 한대로 삭제 캐스케이드를 사용하려고합니다.

기본적으로 내 컨트롤러 아이디에서이 작업을 수행 :

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

Tcc_Model_A의 기본 키가 제대로 삭제 된 경우에도, 외부 키 (B_IDs :

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

나는 내 모델을 나는이 있습니다) 아닙니다. 누군가 내가 뭘 잘못하고 있는지 알아? 조금이라도 도움을 주셔서 미리 감사드립니다. F.

답변

2

응용 프로그램 코드에서 계단식 작업을 시행하지 마십시오. 이러한 작업은 응용 프로그램 코드별로 원자 적으로 수행 할 수 없습니다.

데이터베이스에 FOREIGN KEY...ON DELETE CASCADE 제약 조건을 선언하여 계단식 작업을 구현하십시오. 이들은 RDBMS에서 처리해야합니다. 귀하의 코멘트를 다시


:

외부 키가 업데이트 및 삭제를 계단식에 대한 지원을 제공 할 수 있으며, 그들이 그렇게 부모와 종속 테이블 모두에 대한 변경 사항이 함께 발생하는 원자 적 기능을 수행합니다. 교리 2 사용하는 경우

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

ON이 onDelete = "폭포" 옵션과 함께 @JoinColumn을 구성하여 CASCADE 삭제에 대한 지원이,

+0

청구서를 작성해 주셔서 감사합니다. 좀 더 구체적으로 물어봐도 될까요? 당신이 조언하는 방식을 누가 구현할지 모르겠습니다. 나는 Mysql을 사용하고 있다고 생각한다. – FFSS