Php symfony2通过getter设置值

Php symfony2通过getter设置值,php,symfony,doctrine-orm,entity,getter-setter,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名称都放在一个

我想知道是否有可能动态创建实体并持久化它们。比如我有

class Member {

private $adress; //OneToOne(targetEntity="Adress", inversedBy="Member", cascade={"persist", "remove"})
还有一个班级地址

class Adress
private $member //...
private $city // string
我想动态设置这些值。我将每个getter/setter名称都放在一个字符串中(在本例中为
Member.address.City
),还有一个类似这样的函数(简化)

$data=explode('.','address.City');
$entity=Object;//此处,$entity为空成员
$cursor=$entity;
//-1是只针对getter,而不是setter
对于($i=0;$i<(计数($data)-1);$i++{
$getter='get'.$data[$i];
$cursor=$cursor->$getter();
}
$setter='set'.$data[计数($data)-1];
$cursor->$setter($value);
$em->persist($entity);

遗憾的是,这不起作用。我只能设置直接值,如
Member.Name
,但不能设置关系实体。有办法解决这个问题吗?谢谢!

运行symfony2 cli命令
原则:generate:entities
,它还应该为关系创建setter和getter方法。然后您可以在循环中使用它们。

所以我找到了一个解决方案,在主实体(这里是成员)中,我更新了getter

If($this->address==null)返回新地址()

但是它没有在属性中添加一个地址对象,因此处理了一个随机地址对象。我这样更新它:

If($this->address==null)$this->address=new address();

Return$this->address;

我的实体中有好的getter和setter,我只想动态访问它们。就像我可以得到“Member.address.City”或“Member.School.Class.Teacher.address.City”因为inputIs是你的
address
一个
ArrayCollection
类型?因为它是一个OneToOne关系,它不是一个ArrayCollection你是对的,对不起,我被困在一个多对多的问题上,我忘记了。你有没有
getAddress()
方法?在这个例子中,我有Member->getAddress()->setCity()。但是当我做了$em->persis时($member),新创建的地址实体未持久化属性访问组件可能对您有所帮助。它没有按我所希望的那样工作,但它更干净,所以我现在使用它,谢谢!
$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);