注意:在vendor\doctor\orm\lib\doctor\orm\UnitOfWork.php第2735行(Symfony 2.1)中未定义索引

注意:在vendor\doctor\orm\lib\doctor\orm\UnitOfWork.php第2735行(Symfony 2.1)中未定义索引,symfony,doctrine-orm,Symfony,Doctrine Orm,我有两个实体与OneTONE协会有关。 这一切看起来是这样的: /** * @ORM\Entity * @ORM\HasLifecycleCallbacks() * @ORM\Table(name="a") */ class A { .... /** * @ORM\OneToOne(targetEntity="B", cascade={"all"}, orphanRemoval=true) * @ORM\JoinColumn(name="b_id", ref

我有两个实体与OneTONE协会有关。 这一切看起来是这样的:

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks()
 * @ORM\Table(name="a")
 */
class A
{
....

    /**
     * @ORM\OneToOne(targetEntity="B", cascade={"all"}, orphanRemoval=true)
     * @ORM\JoinColumn(name="b_id", referencedColumnName="id", nullable=true)
     */
    private $b;
}
/**
 * @ORM\Entity
 * @ORM\Table(name="b")
 */
class B
{
....
    /**
     * @ORM\Column(type="string", length=20)
     */
    protected $type;

    /**
     * @ORM\Column(type="integer")
     */
    protected $aId;        
}
我试图做的是在一个类上装箱lifeCycleCallback预更新。 调用preUpdate时,一个类已具有其on ID。我尝试过这样做:

/**
 * @ORM\PreUpdate
 */
public function update()
{
    if (is_null($this->getB()))
        $this->b = new B();
    $this->b->setAId($this->id)->setType('A'/* classname */);
}
B类必须在类型字段中存储类名,在aId字段中存储对象id。我不能在这里使用外键

问题在于上述更新函数返回此错误:

注意:未定义索引:00000000 6914B795000000033B7B784,在C:…\vendor\doctrine\orm\lib\doctrine\orm\UnitOfWork.php第2735行

你知道这个错误意味着什么以及如何解决它吗

编辑 这是在将对象传递到编辑窗体之前获取对象的方式:

$this->getEntityManager()
                    ->createQueryBuilder()
                    ->select('a,b')
                    ->from('MyBundle:A', 'a')
                    ->leftJoin('a.b','b')
                    ->where('a.id = :aId')
                    ->setParameter('aId', $id)
                    ->getQuery()->getSingleResult();
我只编辑一个对象(在表单中),希望在第一次更新时创建关联的B对象,并在A的每次下一次更新时对此B对象进行一些更改

EDIT2 上述错误不再显示。但是,在对象的
@ORM\PreUpdate
中对B对象所做的更改永远不会持久化,即使要关联的对象具有
级联={“all”}
。 以下是一个例子:

/**
 * inside A class !
 *
 * @ORM\PreUpdate
 */
public function update()
{
    $this->lastModified = new \DateTime();        
    $this->getB()
            ->setSomething('something'); // <-- this is never stored to db by cascade 
}
/**
*在教室里!
*
*@ORM\PreUpdate
*/
公共功能更新()
{
$this->lastModified=new\DateTime();
$this->getB()

->设置某物(“某物”);//您检索到
A
对象了吗?您使用了JOIN fetch吗?因为您没有指定
FetchType
EAGER
$this->b
从来都不是
null
,而是保存代理对象。@jperovic查看编辑过的帖子。好的,这是检索它的方式。您遇到的错误可能确实是条令中的错误-你尝试过更新它吗?@jperovic我在我的A类中更改了一些东西,并且“未定义的索引错误”不再存在。但是在对象的
PreUpdate
中对B对象所做的更改不会持久化到数据库中。你能看看我上面的EDIT2吗?我想我可能应该问一个新问题B因为它不再适用于此主题。