我使用的是Symfony2表单,但还没有找到如何嵌入一个中间类表单,该表单允许创建"父/子"类型的多对多"自引用"关系。例如:通过"PersonParent"类与自身相关的"Person"类。xml模式如下所示:
<table name="person">
<column name="id" type="INTEGER" primaryKey="true" autoIncrement="true" required="true"/>
<column name="name" type="VARCHAR" size="100" required="true"/>
</table>
<table name="person_parent">
<column name="person_id" type="INTEGER" primaryKey="true" required="true"/>
<column name="parent_id" type="INTEGER" primaryKey="true" required="true"/>
<foreign-key foreignTable="person" onDelete="CASCADE">
<reference local="person_id" foreign="id"/>
</foreign-key>
<foreign-key foreignTable="person" onDelete="CASCADE">
<reference local="parent_id" foreign="id"/>
</foreign-key>
</table>
我使用的是PropelBundle而不是教条,但即使你使用的是教条,你也可以在这个问题上给我一个线索。请注意,手头的关系与"类Friend"关系不同,后者存在EqualNest行为,该行为创建方法直接从"Person"对象窗体获取/设置"Friend"对象,而无需嵌入中间的"PersonParentType"类窗体。
我尝试使用Propel生成的方法,如setPersonParentsLatedByPersonId,同时在PersonType表单中嵌入PersonParentType表单,以便能够添加"PersonParentsSLatedBypersonId"对象,但问题是我不知道如何在PersonParentType表单中定义"person_id",因为"person_id"还不能用于新的person。在PersonParentType中仅添加"parent_id"字段会导致"非null冲突",因为缺少"person_id"。
有什么想法吗?这个问题与我之前的问题有关,但范围不同,我在之前的问题中询问了是否存在Propel行为来处理这个问题。
您可以在这里找到一些关于自引用多人学说的文档http://doctrine-orm.readthedocs.org/en/2.0.x/reference/association-mapping.html#many-到许多自引用