与 Symfony 中的剩余对象比较后如何删除对象?

How to remove object after comparing to remaining objects in Symfony?

这两天我一直在用不同的版本问同样的问题,但一直没有得到答案,所以我希望现在有人可以帮助我或者更确切地说,我问得更准确:)

非常简单:我创建一个文件 --> 被分配给一个机构 --> 属于一个市场。

有 3 个市场和 100 个实体,所以对于我的文档,我显示了每个机构,但只显示了不同的市场,所以我没有任何重复项。

在添加代理商和市场旁边,我希望能够再次删除它们。所以可能发生的是:

我从 "US" 市场中删除了一个代理机构,并且该市场中没有其他代理机构留下,因此,美国市场也应该被删除。 这就是我被困的地方。

如何查看待剔除机构的盘口是否还在剩余盘口下方?那怎么去掉呢?

这是我尝试过的:

PostUpdate function with UnitOfWork -> getEntityChangeSet()
PreUpdate function with UnitOfWork -> getNew - and OldValue()
OnFlush functino with UnitOfWork -> getScheduledEntityUpdates()

顺便说一句:市场和机构与我的文档有多对多的关系,并且被构造为数组集合,所以我对它们都有 remove/add 函数!

我为解决问题所做的工作:

在我的文档实体中,我有一个 prePersist 函数(那个,我还添加了市场。

/**
* @ORM\PrePersist
* @ORM\PreFlush
*/
public function prePersist() {

    $markets = $this->getMarkets();

    if(count($this->getMarkets())>0){
      foreach($this->getMarkets() as $market) {
          $this->removeMarket($market);
      }
    }

    if(count($this->getAgencies()) > 0){
      foreach($this->getAgencies() as $agency) {
        if(!$this->markets->contains($agency->getMarket())) {
          $this->addMarket($agency->getMarket());
        }
      }
    }
}

所以我删除了所有市场,然后 运行 通过 foreach 循环再次明确地添加所有市场。我敢打赌有一种更有效的方法可以做到这一点,但到目前为止它对我有用:)

这段代码更简单:

$markets = $this->getMarkets();
$markets->clear();

您可以阅读the API Documentation。我认为它应该工作。如果这不起作用,您的上述内容也可以简化。由于我的解决方案只有 2 行代码,您可能只需放入控制器即可。