注意:在vendor\doctor\orm\lib\doctor\orm\UnitOfWork.php第2735行(Symfony 2.1)中未定义索引
我有两个实体与OneTONE协会有关。 这一切看起来是这样的:注意:在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
/**
* @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因为它不再适用于此主题。