Я знаю, что в этой теме много сообщений. К сожалению, в основном они касаются фактической операции сохранения в базе данных. В моем случае у меня есть проблема, которая происходит до операции 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;