我有一个这样的 JSON 对象:
{
"childEntity" : {
"bar": "foo"
},
"someproperty" : "2.0"
}
我使用 JMS Serializer 包来反序列化这个对象并将其转换为 Doctrine2 对象:
$myObject = $serializer->deserialize($jsonStringJustAbove, "My\FooBundle\Entity\masterEntity", 'json');
$myObject = $em->merge($myObject);
$myObject->persist($tour);
$myObject->flush();
这是我的“masterEntity”类:
class masterEntity {
/**
* @JMS\Type("ArrayCollection<My\FooBundle\Entity\childEntity>")
* @ORM\OneToMany(targetEntity="childEntity", mappedBy="masterEntity", cascade={"remove", "persist", "merge"})
*/
private $childentities;
public function setChildEntities(ArrayCollection $childentities)
{
$this->childentities = $childentities;
}
}
这是我的“childEntity”类:
class childEntity {
/**
* @JMS\Type("My\FooBundle\Entity\masterEntity")
* @ORM\ManyToOne(targetEntity="My\FooBundle\Entity\masterEntity", inversedBy="childEntities", cascade={"persist"})
* @ORM\JoinColumn(nullable=false, onDelete="CASCADE")
* @ORM\Id
*/
private $masterEntity;
/**
* @JMS\Type("My\FooBundle\Entity\barEntity")
* @ORM\ManyToOne(targetEntity="My\FooBundle\Entity\barEntity")
* @ORM\JoinColumn(nullable=false)
* @ORM\Id
*/
private $barEntity;
public function setMasterEntity(masterEntity $masterEntity)
{
$this->masterEntity = $masterEntity;
}
public function setBarEntity(barEntity $barEntity)
{
$this->barEntity = $barEntity;
}
}
与所有 childEntities 一样,我收到的 JSON 对象在数据库中还不存在。
我希望反序列化器准备好将 masterEntity 和他的所有孩子保存到数据库中。我的第一个问题是:序列化程序和合并功能是这样的:
$masterEntity = new masterEntity();
$childEntity = new childEntity();
$childEntity->setMasterEntity($masterEntity);
$childEntity->setBarEntity($foo);
我不确定,因为在尝试保存 masterEntity(第二个代码块)时收到此错误:
Notice: Undefined index: 0000000069332c43000000007c145082 in ../vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php line 2740
注意:我使用 Symfony 2.1.8 和 Doctrine 2.3.2 和 JMS Serializer dev-master(截至 2013 年 3 月 4 日)
你能告诉我我想做的是否正确、合乎逻辑和可能?如果是,为什么会出现此错误?如何摆脱它?
谢谢。