Ответ 1
Вы должны внедрить метод __clone()
в своих сущностях, который устанавливает id в значение null и при необходимости связывает отношения. Поскольку, если вы сохраняете идентификатор в связанном объекте, предполагается, что ваш новый объект A
имеет отношение к существующим объектам B
и C
.
Клонный метод для A
:
public function __clone() {
if ($this->id) {
$this->setId(null);
$this->B = clone $this->B;
$this->C = clone $this->C;
}
}
Клон-метод для B
и C
:
public function __clone() {
if ($this->id) {
$this->setId(null);
}
}
https://groups.google.com/forum/?fromgroups=#!topic/doctrine-user/Nu2rayrDkgQ
https://doctrine-orm.readthedocs.org/en/latest/cookbook/implementing-wakeup-or-clone.html
На основе комментария coder4show клон-метод отношения OneToMany на A
, где $this->M
является OneToMany и, следовательно, ArrayCollection
:
public function __clone() {
if ($this->id) {
$this->setId(null);
// cloning the relation M which is a OneToMany
$mClone = new ArrayCollection();
foreach ($this->M as $item) {
$itemClone = clone $item;
$itemClone->setA($this);
$mClone->add($itemClone);
}
$this->M = $mClone;
}
}