2011-09-23 3 views
2

Doctrine ORM에서 defining cascade behavior으로 고생하고 있습니다.Doctrine 1.2에서 삭제를 계단식으로 배열하는 방법은 무엇입니까?

the documentation에 따르면 데이터베이스 수준의 캐스케이드에 onDelete: CASCADE을 사용한다고 가정합니다.

완전한 예는 Symfony tutorial에서 볼 수 있습니다.

그러나 이러한 모든 계단식 사양은 내 스키마에서 무시됩니다. 물론

Advancement: 
    columns: 
    association_id: 
     type: integer(4) 
     notnull: true 
    task_id: 
     type: integer(4) 
     notnull: true 
    state: 
     type: enum 
     values: ['todo', 'current', 'done', 'cancelled'] 
     notnull: true 
    relations: 
    Association: 
     class: Association 
     local: association_id 
     foreignType: one 
     onDelete: CASCADE 
    Task: 
     class: Task 
     local: task_id 
     foreignType: one 
     onDelete: CASCADE 

, 작업 및 협회 테이블이 올바르게 정의되어

여기에 관련 발췌 한 것입니다. 너무 긴 질문을 피하기 위해 여기에 게시하지는 않겠지 만 필요한지 물어보십시오. (...도 아니고 REFERENCES, 그런데)

CREATE TABLE advancement 
(id INTEGER PRIMARY KEY AUTOINCREMENT, 
association_id INTEGER NOT NULL, 
task_id INTEGER NOT NULL, 
state VARCHAR(255) NOT NULL); 

CASCADE 추적하지 : 여기

생성 된 SQL (바꿈 내)입니다. 물론 계단식 작동하지 않으며 기본 백엔드 동작을 변경하여 수동으로 구현해야했습니다.

내가 잘못하고있는 것을 아는 사람이 있습니까?

+0

Doctrine은 생성 된 sql (data/sql/schema.sql)의 끝에 외래 키 관계를 생성하고 거기에 있는지 확인합니다. – Maerlyn

+0

아니, 실제로 생성 된 모든 SQL을 통해'grep'ped가 있고,'CASCADE'의 흔적은 없습니다 ... 정밀도에 감사드립니다! – MattiSG

답변

1

doctrine은 RDBMS (MySQL인가?)가 캐스 캐 이드를 지원하지 않는다는 사실을 차단할 것입니다. MySQL을 MyISAM 스토리지 엔진으로 사용하면 (REFERENCES을 지원하지 않음 ...). 내가 너라면 RDBMS 클라이언트와 직접 연결을 만들려고 노력할 것인가. 가능한지 여부를 확인하는 것이다.

+0

Doctrine은 mysql의 경우 자동으로 innodb를 사용한다. – Maerlyn

+0

SQLite3 (3.6.12)을 사용하고 있으므로 [문제가되지 않아야합니다] (http://www.sqlite.org/foreignkeys.html#fk_actions) :) – MattiSG

+0

생성하려고 시도한 적이 있습니까? 사용중인 버전에서 작동하는지 확인하십시오. – greg0ire