我过去两天在不同的版本中一直在问相同的问题,但从来没有得到答案,所以我希望现在有人可以帮助我,或者更确切地说,我会更准确地问它:)
非常简单:我创建了一个文档 - >被分配到代理商 - >属于市场。
有3个市场和100个实体,所以对于我的文件,我只显示每个代理商,但只有不同的市场,所以我没有任何重复。
旁边添加代理商&市场,我希望能够再次删除它们。所以可能发生的事情是:
我从" US" -market中删除了一个代理商,并且该市场没有其他代理商离开,因此,美国市场也应该被删除。 那就是我被困的地方。
如何检查待移除代理商的市场是否仍在剩余市场之下?然后如何将其删除?
这是我尝试的内容:
PostUpdate function with UnitOfWork -> getEntityChangeSet()
PreUpdate function with UnitOfWork -> getNew - and OldValue()
OnFlush functino with UnitOfWork -> getScheduledEntityUpdates()
Btw:市场和代理商与我的文档有很多关系,并且构造为arraycollections,所以我有两个删除/添加功能!
答案 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。我认为它应该有效。如果这不起作用,您的上述内容也可以简化。而且由于我的解决方案只有两行代码,你可以放入你的控制器。