Doctrine orm Zend2-Doctrine2:创建具有多对一关系的新实体

Doctrine orm Zend2-Doctrine2:创建具有多对一关系的新实体,doctrine-orm,zend-framework2,Doctrine Orm,Zend Framework2,我有一个“记录”实体,可以有N个“注释” 这是这两个实体的设置: 记录 <entity name="Application\Model\Record" table="record"> <id name="recordID" type="integer"> <generator strategy="AUTO" /> </id> <many-to-one field="user" target-entity

我有一个“记录”实体,可以有N个“注释”

这是这两个实体的设置:

记录

<entity name="Application\Model\Record" table="record">
    <id name="recordID" type="integer">
        <generator strategy="AUTO" />
    </id>
    <many-to-one field="user" target-entity="Application\Model\User">
        <join-column name="userID" referenced-column-name="userID" />
    </many-to-one>
    <field name="status" type="string" nullable="false" />
    <one-to-many field="comments" target-entity="Application\Model\RecordComment" mapped-by="record" />
</entity>
使现代化 我错误地认为条令会直接产生联系。 注释实际上添加到记录中,在以下情况之后:

$form->setData($this->request->getPost());
但是,在保留记录之前,我必须手动迭代注释并将记录分配回注释:

foreach($record->getComments() as $comment){
    $comment->setRecord($record);
}
有没有其他方法可以解决这个问题,而不用手动迭代元素?
如果没有创建反向连接,将元素添加到我的实体中有什么意义?

您做得对。至少是这样说的(使用用户评论示例):

即使您持久化包含我们新注释的新用户,如果您删除对EntityManager#persist($myFirstComment)的调用,此代码也会失败。条令2不会将persist操作级联到所有新的嵌套实体

但是,我会按照文档建议的方式,坚持以下评论:

(...)
foreach( $record->getComments() as $comment ) {
    $comment->persist( $comment );
}

我刚才问过这个问题,但我是这样解决的

定义一对多关系时,请确保添加cascade persist选项。这将确保子元素正确地附加到对象上,并随对象一起持久化

<one-to-many field="comments" target-entity="Application\Model\RecordComment" mapped-by="record">
    <cascade>
        <cascade-persist />
    </cascade>
</one-to-many>


<> P>不需要迭代所有注释,除非您需要添加任何其他关系(用户过帐等)

,您是否考虑在表单中使用StrutObjutsCopyDead?通过这种方式,您可以将这些注释提供给表单,并以这种方式将它们保存在数据2中,但是为了使用DoctrineObjectSelect,您已经需要创建注释。如果查看我的RecordComment定义,因为它需要recordID才能存在,所以这是不可能的,那么没有记录就不能有注释。
(...)
foreach( $record->getComments() as $comment ) {
    $comment->persist( $comment );
}
<one-to-many field="comments" target-entity="Application\Model\RecordComment" mapped-by="record">
    <cascade>
        <cascade-persist />
    </cascade>
</one-to-many>