Symfony не удаляет сущность из коллекции
Я знаю, что есть множество сообщений на эту тему в целом. К сожалению, они в основном имеют дело с фактической сохраняющейся операцией в базе данных. В моем случае у меня есть проблема, которая происходит до операции persist:
У меня есть форма с (Doctrine) persistenceCollection of entity. Вы можете удалить "объекты" из DOM через JavaScript. После отправки, когда handleRequest вызывается в форме, вызывается функция в моей сущности, которая удаляет сущность из коллекции в самом объекте, и она вызывается, как я могу проверить в отладчике:
/**
* Remove prices
*
* @param \Whizzpm\Bundle\Entity\Supplier\SupplierPrice $prices
*/
public function removePrice(\Whizzpm\Bundle\Entity\Supplier\SupplierPrice $prices)
{
$this->prices->removeElement($prices);
}
И это определение цены в долларах:
/**
* @var
* @ORM\OneToMany(targetEntity="SupplierPrice", mappedBy="priceList", cascade={"all"})
*/
private $prices;
Основная идея состоит в том, чтобы сравнить обновленную сущность с ее предыдущим состоянием, но после того, как функция, указанная выше, завершена, право все еще находится в коллекции.
Чтобы сделать это более точным: если я проверяю $this сразу после того, как "removeElement($ values)" закончен, он все еще содержит объект, который просто должен был быть удален.
Может быть, это важно:
поставщик (основной субъект)
- прейскурант (собственность основного лица - также самого лица)
- цены (свойство прайс-листа, совокупность лиц (ценовые позиции)
Прайс-лист - это набор, из которого элемент (элемент цены) должен быть удален.
Есть мысли по этому поводу? Я могу добавить любую информацию, которая вам нужна по этому вопросу, я просто не знаю, какой из них имеет смысл, так как есть нагрузки.
1 ответ
Наконец я нашел решение в этом посте:
removeElement () и clear() не работают в доктрине 2 со свойством коллекции массивов
Я также должен сбросить соответствующее значение в объекте-владельце:
public function removePrice(\Whizzpm\Bundle\Entity\Supplier\SupplierPrice $prices)
{
$this->prices->removeElement($prices);
$prices->setPriceList(null);
}
и добавьте orphanRemoval=true в коллекцию сущностей
/**
* @var
* @ORM\OneToMany(targetEntity="SupplierPrice", mappedBy="priceList", cascade={"all"}, orphanRemoval=true)
*/
private $prices;