【问题标题】:symfony2 set value through getterssymfony2 通过 getter 设置值
【发布时间】:2014-11-17 10:36:03
【问题描述】:

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • 我的实体中有很好的 getter 和 setter,我只想以动态方式访问它们。就像我可以得到“Member.Adress.City”或“Member.School.Class.Teacher.Adress.City”作为输入
  • 您的addressArrayCollection 类型吗?
  • 因为是 OneToOne 关系,所以不是 ArrayCollection
  • 你说得对,对不起,我被困在一个多对多的问题上,我忘记了。你没有getAddress() 方法吗?
  • 在这个例子中,我有 Member->getAdress()->setCity()。但是当我做 $em->persist($member) 时,新创建的 Adress 实体没有持久化
【解决方案2】:

所以我找到了一个解决方案,在主要实体(这里是成员)中,我更新了 getter。我正在做类似的事情

If($this-&gt;adress == null) return new Adress()

但它没有在属性中添加 Adress 对象,因此在随机 Adress 对象上工作。我是这样更新的:

If($this->adress == null) $this->adress = new Adress(); Return $this->adress;

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多