Я сойду с ума.Удаление детской коллекции от родителя
Это родитель:
class Parent {
/**
* @Id
* @GeneratedValue
* @Column(type="integer")
*/
protected $id;
/**
* @OneToMany(targetEntity="Core\Parent\Child", mappedBy="parent", cascade={"persist", "remove"})
*/
protected $children;
public function __construct() {
$this->children = new \Doctrine\Common\Collections\ArrayCollection();
}
public function getChildren() {
return $this->children->toArray();
}
public function removeAllChildren() {
$this->children->clear();
}
public function addChild($child) {
$this->children->add($child);
}
}
Это ребенок:
class Child {
/**
* @Id
* @GeneratedValue
* @Column(type="integer")
*/
protected $id;
/**
* @ManyToOne(targetEntity="Core\Parent", inversedBy="children")
* @JoinColumn(name="parent_id", referencedColumnName="id")
*/
protected $parent;
}
Что не работает для меня является удаление всех существующих детей для этого родителя. Из моего контроллера я:
$parent = $em->getRepository('Core\Parent')->find(1);
$parent->removeAllChildren();
На данный момент, я могу назвать getChildren()
и пусто. Прежде чем мой скрипт завершает работу, я также делаю следующее: $em->flush();
Однако я проверяю таблицы базы данных, и данные все еще там! Я не понимаю, и это сводит меня с ума. Как удалить всех существующих дочерних элементов для этого родителя?
OMG, спасибо! Это оно. – Vic
Но 'orphanRemoval = true' будет работать только в том случае, если у ребенка нет других ссылок на него. Когда вы добавите дополнительную ссылку, это больше не будет работать. – tobain