2012-08-12 72 views
1

我正在使用doctrine的SoftDelete,刪除後我想SofDelete相關記錄。學說,應用級聯:[delete]不起作用

這裏是我使用的Schema文件。

detect_relations: true 
User: 
    actAs: 
    Timestampable: 
    SoftDelete: 
    Sluggable: 
     unique: true 
     fields: [name] 
     canUpdate: true 
    tableName: user 
    columns: 
    name: 
     type: string(50) 
     notnull: true 
    email: 
     type: string(50) 
     notnull: true 
     unique: true 
    password: 
     type: string(50) 
     notnull: true 
    business_id: integer 
    relations: 
    Business: 
     cascade: [delete] 
Business: 
    actAs: 
    Timestampable: 
    SoftDelete: 
    Sluggable: 
     unique: true 
     fields: [name] 
     canUpdate: true 
    tableName: business 
    columns: 
    name: 
     type: string(50) 
     notnull: true 
    website: string(100) 
    address: string(100) 

當我嘗試SoftDelete用戶不刪除業務表中的相關記錄(即它不會更新業務表的deleted_at標誌)。只更新用戶表中的deleted_at標誌。

我正在使用的DQL是。

$q = Doctrine_Query::create() 
    ->delete('Model_User u') 
    ->where('u.id = ?', $id); 
$q ->execute(); 

我在哪裏出錯了?

回答

4

經過一段時間的搜索後,我終於找到了自己的解決方案。希望這可以幫助有同樣問題的人和我一樣。

這裏是應用程序級刪除級聯工作的條件很少。

  • 不像保存()操作刪除()級聯需要從您的架構定義cascade: [delete]開啓明確

之餘,一定要注意,你需要明確定義是非常重要的關係也是如此。
如果您要根據detect_relations: true爲您生成所有關係,這將不適用於應用程序級別刪除級聯。 (至少它沒有爲我工作,手動定義它的工作關係後)。

  • 應用級級聯保存()和delete()做DQL更新時,不適用和delete語句,調用save()和 刪除()在你的對象,只有當。

原則文件不清楚這一點。我不得不參考symfony文檔來了解這一點。學說文件只說。

下面描述的一般程序,當你刪除通過$ record-記錄 >刪除()

,我明白這是相當混亂。但經過symfony的學說文件後,我很清楚如何去做。所以不是通過DQL刪除。我不得不使用這個。

$user = Doctrine_Core::getTable('User')->find(1) 
$user->delete(); 

和Booom,它的工作原理。 :)

P.S:如果有人想參考,這裏是symfony文檔的鏈接。

http://www.symfony-project.org/doctrine/1_2/en/04-Schema-Files#chapter_04_sub_application_level

這裏是鏈接到其澄清我的疑問後這不是任何使用的雖然:)

https://groups.google.com/forum/?fromgroups#!topic/doctrine-user/POq6ybO01lg%5B1-25%5D