symfony2通过getter设置值

时间:2014-11-17 10:36:04

标签: php symfony doctrine-orm entity getter-setter

我想知道是否可以动态创建实体并保留它们。例如,我有

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,但不能设置关系实体。有办法解决这个问题吗?谢谢!

2 个答案:

答案 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;