Symfony不会从集合中删除实体


Symfony does not remove entity from collection

我知道有很多关于这个主题的帖子。不幸的是,这些主要处理对数据库的实际持久操作。就我而言,我在持久操作之前遇到了一个问题:

我有一个带有(教义)持久性的实体集合的形式。您可以通过javascript从DOM中删除"对象"。提交后,当在窗体上调用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;

基本思想是将更新的实体与其以前的状态进行比较,但在上述函数完成后,整个实体仍在集合中。

更精确地说:如果我在"removeElement($prices)"通过后立即检查$this,它仍然包含应该删除的对象。

也许这很重要:

供应商(主体)

  • 价目表(主实体的属性 - 也是实体本身)
      价格(
    • 价目表的属性、实体集合(价格项)
价格

是应删除元素(价格项)的集合。

对此有什么想法吗?我可以添加您需要的关于这个问题的任何信息,我只是不知道,其中哪个有意义,因为有负载。

最后我在

这篇文章中找到了一个解决方案:

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;