2014-10-03 3 views
0

내 Codeigniter 프로젝트에서 php-activerecord를 사용하고 있고, 데이터베이스에 2 개의 테이블이 있고, 질문 테이블과 일대 다 관계에 연결된 응답 테이블이 있습니다. 삭제할 때 그 질문이codeigniter의 PHP activerecord에서 자식 객체를 삭제하는 방법

$question = Question::find($id); 
    $question->delete(); 

답변과 같은 질문은 좀 중복 느낌, 내가 이것을 달성하기 위해 내 모든 모델에 before_destroy 콜백 메소드를 사용할 필요가 삭제되지 않습니다.

내 질문에, 콜백 메소드를 사용하지 않고도 부모를 삭제할 때 부모와 관련된 하위 객체를 삭제할 수 있습니까?

+0

DB 자체에서 할 수 없습니까? 올바른 외래 키를 지정하면 "ON DELETE CASCCADE"를 추가하여 모든 자식에게 삭제를 계단식으로 처리 할 수 ​​있습니다. – Patrick

+0

응답을 보내 주셔서 감사합니다. 패트릭 (Patrick)하지만 DB에서 처리하고 싶지 않았습니다. 삭제되지 않을 때 삭제됩니다. –

답변

0

@patrick이 주석에서 제안한대로 데이터베이스에서이 작업을 수행하지 않으려는 경우, 더 많은 제어 권한을 부여하는 방법을 상상하기가 어렵습니다. 자동 삭제 (예 : 삭제 기능에 추가)하면 일정한 상태로 유지됩니다.

아마도 가장 좋은 것은 Question 모델에서 기능을 만드는 것입니다. 당신과 같이 호출 할 것 중 하나 루프 아이들을 삭제 하나, 하나를

$q = Question::find($id); 
$q->deleteChildern(); 
$q->delete(); 

또는이 작업을 수행하고

$q = Question::find($id); 
$q->deleteWithChildren(); 

기능을 얻을 것, 그래서 객체를 삭제하는 기능 그 자체가 단순한 것일 것입니다

foreach($this->children as $child){ 
    $child->delete(); 
} 
관련 문제