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;
Другие вопросы по тегам