我想知道是否可以动态创建实体并保留它们。例如,我有
class Member {
private $adress; //OneToOne(targetEntity="Adress", inversedBy="Member", cascade={"persist", "remove"})
和一个班级地址
class Adress
private $member //...
private $city // string
我想动态设置值。我在字符串中有每个getter / setter名称(在本例中为Member.Adress.City
,以及一个像这样工作的函数(简化)
$data = explode('.', 'Adress.City');
$entity = Object; //Here, $entity is an empty Member
$cursor = $entity;
//-1 is to target only getters, and not setters
for($i = 0; $i < (count($data) - 1); $i++) {
$getter = 'get' . $data[$i];
$cursor = $cursor->$getter();
}
$setter = 'set' . $data[count($data) - 1];
$cursor->$setter($value);
$em->persist($entity);
可悲的是,这不起作用..我只能设置直接值,如Member.Name
,但不能设置关系实体。有办法解决这个问题吗?谢谢!
答案 0 :(得分:0)
运行symfony2 cli命令doctrine:generate:entities
,它也应该为关系创建一个setter和getter方法。然后你可以在循环中使用它们。
答案 1 :(得分:0)
所以我找到了一个解决方案,在主要实体(这里是会员)中,我更新了getter。我正在做类似
的事情 If($this->adress == null) return new Adress()
但它没有在属性中添加Adress对象,因此处理随机的Adress对象。我这样更新了它:
If($this->adress == null) $this->adress = new Adress();
Return $this->adress;