与 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 行代码,您可能只需放入控制器即可。
这两天我一直在用不同的版本问同样的问题,但一直没有得到答案,所以我希望现在有人可以帮助我或者更确切地说,我问得更准确:)
非常简单:我创建一个文件 --> 被分配给一个机构 --> 属于一个市场。
有 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 行代码,您可能只需放入控制器即可。