Symfony не удаляет объект из коллекции

Я знаю, что в этой теме много сообщений. К сожалению, в основном они касаются фактической операции сохранения в базе данных. В моем случае у меня есть проблема, которая происходит до операции persist-operation:

У меня есть форма с (Доктрина) persistenceCollection объектов. Вы можете удалить «объекты» из 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); } 

И это определение $ prices:

  /** * @var * @ORM\OneToMany(targetEntity="SupplierPrice", mappedBy="priceList", cascade={"all"}) */ private $prices; 

Основная идея состоит в том, чтобы сравнить обновленный объект с его предыдущим состоянием, но после того, как функция выше закончила, entitiy все еще находится в коллекции.

Чтобы сделать это более точным: если я проверю $ this прямо после завершения «removeElement ($ prices)», он все еще содержит объект, который должен был быть удален.

Может быть, это важно:

поставщик (основной объект)

  • прейскурант (свойство основного объекта – также самого объекта)
    • цены (имущество прейскуранта, сбор сущностей (цены)

цены – это сбор, элемент которого (цена) должен быть удален.

Любые мысли по этому поводу? Я могу добавить любую информацию, которая вам нужна по этому вопросу, я просто не знаю, какая из них имеет смысл, искренне есть нагрузки.

Наконец, я нашел решение в этой статье:

removeElement () и clear () не работают в доктрине 2 с использованием свойства массива

Я также должен отключить соответствующее значение в собственном объекте:

 public function removePrice(\Whizzpm\Bundle\Entity\Supplier\SupplierPrice $prices) { $this->prices->removeElement($prices); $prices->setPriceList(null); } дополнительно public function removePrice(\Whizzpm\Bundle\Entity\Supplier\SupplierPrice $prices) { $this->prices->removeElement($prices); $prices->setPriceList(null); } дополнительно 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;