Zend framework Zend+;Doctrine2:如何使用ArrayCollections()正确刷新实体?

Zend framework Zend+;Doctrine2:如何使用ArrayCollections()正确刷新实体?,zend-framework,orm,doctrine,doctrine-orm,Zend Framework,Orm,Doctrine,Doctrine Orm,我正在开始我的第一个Zend框架+条令2项目,我有一个问题。我使用PostgreSQL 9和Apache 2.2 我有以下实体(实体和属性的名称仅用于此示例): 您的关系都是多人关系,因此不应涉及阵列集合 因为没有集合,所以您不想添加素材,而是想设置素材: 在实体1中: public function setEntity2(Entity2 $entity2){ $this->entity2 = $entity2 return $this; } 在控制器中: <?ph

我正在开始我的第一个Zend框架+条令2项目,我有一个问题。我使用PostgreSQL 9和Apache 2.2 我有以下实体(实体和属性的名称仅用于此示例):


您的关系都是多人关系,因此不应涉及阵列集合

因为没有集合,所以您不想
添加
素材,而是想
设置
素材:

在实体1中:

public function setEntity2(Entity2 $entity2){
    $this->entity2 = $entity2
    return $this;
}
在控制器中:

<?php
class IndexController extends Zend_Controller_Action
{
    public function init()
   {
        $this->doctrine = Zend_Registry::get('doctrine');
        $this->em = $this->doctrine->getEntityManager();
    }

public function indexAction()
{
    $ent2 = new Xproject\Entities\Entity2();
    $this->em->persist($ent2);

    $ent3 = new Xproject\Entities\Entity3();
    $ent3->setAtt1('xyz');
    $this->em->persist($ent3);

    $ent4= new Xproject\Entities\Entity4();
    $ent4->setAtt1('abc');
    $this->em->persist($ent4);

    //1st flush
    $this->em->flush();                       

    $ent1= new Xproject\Entities\Entity1();
    $ent1->setAtt1(350.00);
    $ent1->addEntity2(ent2);
    $ent1->addEntity3(ent3);
    $ent1->addEntity4(ent4);
    $this->em->persist($ent1);

    //2nd flush
    //$this->em->flush();     
}
}
$entity1->setEntity2($entity2);
就这样。像$this->entity2->add()这样的调用正在工作,因为您正在将这些属性初始化为ArrayCollection。但教条只是忽视了它们


换句话说,对于*ToOne关系,对象属性只是外部实体类型。将它们视为简单的值,并通过典型的set*()变异体设置它们。

try…catch
var_dump
异常中围绕
indexAction
的内容。(InvalidArgumentException)#176(7){[“message”:protected]=>string(275)“通过未配置为级联持久化操作的关系找到了新实体:条令\公共\集合\ArrayCollection@0000000057ee7b54000000006e20d44c.显式持久化新实体或在关系上配置级联持久化操作。“[“字符串”:“异常”:private]=>string(0)”“[“代码”:protected]=>int(0)[“file”:protected]=>string(115)/***反向端*@var entity1*@OneToMany(targetEntity=“entity1”,mappedBy=“entity2”,cascade={“persist”})*/添加在“cascade={“persist”}”行的末尾,但仍然存在相同的问题
$ent1->addEntity2(ent2);
应该是
$ent1->$addEntity2($ent2)这就是问题所在,蒂姆德夫。非常感谢大家
$entity1->setEntity2($entity2);