2011-11-18 50 views
0

目标:当用户被删除时,UserCategory中用户的所有条目也应该被删除。Symfony 1.4解决完整性约束违规所需的原则架构帮助

的模式:

User: 
    actAs: { Timestampable: ~ } 
    columns: 
    first_name: { type: string(255) } 
    name: { type: string(255) } 
    company: { type: string(255) } 
    email: { type: string(255) } 
    phone: { type: string(255) } 
    language_id: { type: integer, notnull: true } 
    token: { type: string(255) } 
    activated: { type: boolean, default: false } 
    relations: 
    Categories: 
     class: Category 
     local: user_id 
     foreign: category_id 
     refClass: UserCategory 
     type: many 

UserCategory: 
    actAs: { Timestampable: ~ } 
    columns: 
    user_id: { type: integer, notnull: true } 
    category_id:  { type: integer, notnull: true } 

Category: 
    actAs: { Timestampable: ~ } 
    columns: 
    language_id: { type: integer, notnull: true } 
    name: { type: string(255), notnull: true, unique: false } 
    revision: { type: integer, notnull: false } 
    icon:  { type: string(255) } 
    relations: 
    User: 
     class: User 
     local: category_id 
     foreign: user_id 
     refClass: UserCategory 
     type: many 

会发生什么:

SQLSTATE [23000]:完整性约束违规:1451无法删除或更新父行:外键约束失败(testtableuser_category ,CONSTRAINT user_category_user_id_user_id FOREIGN KEY(user_id)参考文献userid))

回答

2

greg0ire said,为UserCategory定义一个级联做了这项工作。它完全错过了关系块:

UserCategory: 
    actAs: { Timestampable: ~ } 
    columns: 
    user_id: { type: integer, notnull: true } 
    category_id:  { type: integer, notnull: true } 
    relations: 
    User: {onDelete: CASCADE, local: user_id, foreign: id, foreignAlias: Users} 
    Category: {onDelete: CASCADE, local: category_id, foreign: id, foreignAlias: Categories} 
+1

您正在使用数据库级联,这是最快的解决方案。 +1 – greg0ire

1

阅读本§ of the doctrine documentation并挑选最适合你的应用程序级级联和数据库级级联

+0

删除CASCADE不是在这里的选项,只有user_category中的条目需要删除,而不是在类别中。所以这更多的是调试YML的帮助请求。 –

+1

哦,我明白了。但是,在'UserCategory'中定义一个与User相关的关系并且使用级联可以完成我想要的工作。 – greg0ire

相关问题