【发布时间】: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,但不能设置关系实体。有没有办法解决这个问题?谢谢!
【问题讨论】:
-
属性访问组件可能对你有用..symfony.com/doc/current/components/property_access/…
-
它没有按我的意愿工作,但它更干净,所以我现在正在使用它,谢谢!
标签: php symfony doctrine-orm entity getter-setter