2011-09-23 58 views
2

我一直在努力與defining cascade behavior在學說ORM。如何與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 

當然,任務和關聯表是否正確定義。我不會在這裏首先發布它們以避免太長的問題,但請詢問是否有必要。

這裏是生成的SQL(換行符礦):

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

不是一個CASCADE的痕跡(也不是REFERENCES,順便......)。當然,級聯不起作用,我必須通過改變默認的後端操作來手動實現它。

有沒有人知道我在做什麼錯在這裏?

+0

Doctrine在生成的sql(data/sql/schema.sql)結尾處生成外鍵關係,檢查它們是否在那裏。 – Maerlyn

+0

不,我實際上'grep'通過所有生成的SQL,並沒有'CASCADE'的蹤跡...感謝精度! – MattiSG

回答

1

我認爲主義會關閉你的RDBMS(是MySQL?)不支持級聯的事實,如果它不支持。如果您使用MySQL和MyISAM存儲引擎(不支持REFERENCES,順便說一下),情況就是這樣。如果我是你,我會嘗試直接與你的RDBMS客​​戶端創建一個級聯,只是爲了檢查它是否可行。

+0

在mysql的情況下,主義自動使用innodb。 – Maerlyn

+0

我使用SQLite3(3.6.12),所以[不應該是一個問題](http://www.sqlite.org/foreignkeys.html#fk_actions):) – MattiSG

+0

你試過創建一個,只是爲了看看它是否適合你的版本? – greg0ire