Symfony2 形式:如何处理"parent/child"类型的多对多"self-referencing"关系?



我使用的是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-到许多自引用

最新更新