我正在使用 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 like”关系不同,后者存在 EqualNest 行为,该行为创建方法以直接从“Person”对象形式获取/设置“Friend”对象,而无需嵌入中间“PersonParentType”类形式。
我尝试使用 Propel 生成的方法,如 setPersonParentsRelatedByPersonId,同时在 PersonType 表单中嵌入 PersonParentType 表单以便能够添加“PersonParentsRelatedByPersonId”对象,但问题是我不知道如何在 PersonParentType 表单中定义“person_id”因为“person_id”还不能用于新的人。仅在 PersonParentType 中为“parent_id”添加一个字段会导致“非空违规”,因为缺少“person_id”。
有任何想法吗?这个问题与我之前询问是否存在处理此问题的 Propel 行为的问题相关但范围不同。