这是一个奇怪的
采用这种模式:
Contact:
actAs: [Timestampable,SoftDelete]
columns:
first_name: { type: string(255), notnull: true }
second_name: { type: string(255), notnull: true }
relations:
Forums:
class: Forum
refClass: ContactForum
local: forum_id
foreign: contact_id
foreignAlias: Contacts
ContactForums:
local: id
foreign: contact_id
class: ContactForum
type: many
foreignType: one
cascade: [delete]
Forum:
actAs: [Timestampable,SoftDelete]
columns:
name: { type: string(255), notnull: true }
relations:
ContactForums:
class: ContactForum
local: id
foreign: forum_id
type: many
cascade: [delete]
ContactForum:
actAs: [Timestampable]
columns:
contact_id: { type: integer, primary: true }
forum_id: { type: integer, primary: true }
然后,如果我们将几个Forum
对象关联到Contact
对象,然后尝试删除此Contact
对象,我们会收到以下错误消息:
完整性约束违规:19 contact_forum.created_at可能不是 NULL
如果将SoftDelete添加到链接表,则删除工作正常,SoftDelete也是如此。但是我们不希望链接表上有SoftDelete,因为这意味着我们的主键无法正常工作。这是一个错误吗?
答案 0 :(得分:1)
这是一个学说错误。这里的错误报告:http://www.doctrine-project.org/jira/browse/DC-795,修复补丁。
答案 1 :(得分:0)
我认为,假设交响乐正在使用Doctrine 1.2.2,你的多对多关系的ID就会被搞砸了。试试这个:
Contact:
actAs: [Timestampable,SoftDelete]
columns:
first_name: { type: string(255), notnull: true }
second_name: { type: string(255), notnull: true }
relations:
Forums:
refClass: ContactForum
local: contact_id
foreign: forum_id
cascade: [delete]
Forum:
actAs: [Timestampable,SoftDelete]
columns:
name: { type: string(255), notnull: true }
relations:
Contacts:
refClass: ContactForum
local: forum_id
foreign: contact_id
cascade: [delete]
ContactForum:
actAs: [Timestampable]
columns:
contact_id: { type: integer, primary: true }
forum_id: { type: integer, primary: true }
在关系中,当使用refClass指定类时,local
和foreign
表示“此另一个类'表中代表我的列”和“此其他类表上的列表示”另一个“,分别。”
编辑:我不确定您在联系人下的论坛关系的定义是否正确。假设您只需要多对多关系,就可以将其删除。
Double Edit:看。以下是正确运行和级联多对多关系所需的所有模式。您不需要定义两个关系来正确级联删除。