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

时间:2017-09-13 17:28:13

标签: symfony compare lifecycle unit-of-work

我过去两天在不同的版本中一直在问相同的问题,但从来没有得到答案,所以我希望现在有人可以帮助我,或者更确切地说,我会更准确地问它:)

非常简单:我创建了一个文档 - >被分配到代理商 - >属于市场。

有3个市场和100个实体,所以对于我的文件,我只显示每个代理商,但只有不同的市场,所以我没有任何重复。

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

我从" US" -market中删除了一个代理商,并且该市场没有其他代理商离开,因此,美国市场也应该被删除。 那就是我被困的地方。

如何检查待移除代理商的市场是否仍在剩余市场之下?然后如何将其删除?

这是我尝试的内容:

PostUpdate function with UnitOfWork -> getEntityChangeSet()
PreUpdate function with UnitOfWork -> getNew - and OldValue()
OnFlush functino with UnitOfWork -> getScheduledEntityUpdates()
Btw:市场和代理商与我的文档有很多关系,并且构造为arraycollections,所以我有两个删除/添加功能!

2 个答案:

答案 0 :(得分:2)

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

在我的文档实体中,我有一个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循环再次明确地添加所有市场。我打赌有一种更有效的方法可以做到这一点,但到目前为止它对我有用:)

答案 1 :(得分:1)

此代码更简单:

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

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