2012-09-17 3 views
0

테이블 A 레코드를 만들 때 여러 개의 추가 자식 레코드를 만들어야하는 테이블 (테이블 A라고 함)이 있습니다. 테이블 A 레코드 삭제 테이블 B 레코드는 삭제해야합니다.Symfony 1.4에서 doctrine으로 postInsert하는 방법은 무엇입니까?

ON DELETE CASCADEschema.yml에서 사용하면 레코드를 쉽게 삭제할 수 있지만 레코드를 추가하는 것이 그렇게 간단하지는 않습니다. 테이블 A 레코드에 아직 ID가 없기 때문에 Doctrine_Record::postInsert을 재정의하면이 작업이 수행되지 않습니다. Doctrine_Form save를 무시해도 그것을하지 않습니다.

EventListener가는 길이나 데이터베이스 트리거입니까? 전자의 경우 예가 있습니까? 후자의 경우 트리거를 schema.yml에 어떻게 든 지정할 수 있습니까?

답변

0

postInsert가 작동하지 않습니까?

내가합니다 (Table.class.php 내부) 내 프로젝트 중 하나에이 코드 조각을 사용

public function postInsert($event) 
{ 
    $dispatcher = ProjectConfiguration::getActive()->getEventDispatcher(); 
    $dispatcher->notify(new sfEvent($this, 'item.new', array(
    'item' => $this 
))); 
} 

내가 새 항목에 대한 이벤트를 확산. 그럼, 내 구성에서이 이벤트를 잡을 :

class frontendConfiguration extends sfApplicationConfiguration 
{ 
    public function configure() 
    { 
    // [....] 
    $this->dispatcher->connect('item.new', array('shareEvents', 'postToSocial')); 

그리고 내 shareEvents 클래스

나는 문제없이 항목 ID에 액세스 :

class shareEvents 
{ 
    static public function postToSocial(sfEvent $event) 
    { 
    $item = $event['item']; 

    $queue = new AutopostQueue(); 
    $queue->setItemId($item->getId()); 
    $queue->save(); 

그건 그렇고, 당신은 트리거 액션을 수행 할 수 있습니다 너무. Doctrine이 모델, 형식 등을 생성하기 위해 구문 분석 한 이후에 schema.yml 안에 트리거를 정의 할 수 있다고 생각하지 않습니다. 그러나 /data/sql 디렉토리에 trigger.sql 파일을 정의하면 전화 할 때 자동으로로드됩니다.

php symfony doctrine:insert-sql