Я хотел бы знать, возможно ли динамически создавать объекты и сохранять их. Например у меня
class Member {
private $adress; //OneToOne(targetEntity="Adress", inversedBy="Member", cascade={"persist", "remove"})
И класс Адресс
class Adress
private $member //...
private $city // string
Я хочу установить значения динамически. У меня есть каждое имя получателя / сеттера в строке (в этом случае 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
, но не реляционные сущности. Есть ли способ решить это? Спасибо !
Запустите команду symfony2 cli doctrine:generate:entities
и это должно создать методы установки и получения также для отношений. И тогда вы можете использовать их в своем цикле.
Итак, я нашел решение, в основной сущности (здесь член), я обновил геттер. Я делал что-то вроде
If($this->adress == null) return new Adress()
Но он не добавил объект Adress в свойство, таким образом, работая со случайным объектом Adress. Я обновил это так:
If($this->adress == null) $this->adress = new Adress();
Return $this->adress;