Как удалить удаленную запись из логики arraycollection в Symfony?
В рамках функции preFlush в моей сущности у меня есть следующий код
$markets = $this->getMarkets();
if(count($this->getAgencies()) > 0){
foreach($this->getAgencies() as $agency) {
if(!$this->markets->contains($agency->getMarket())) {
$this->addMarket($agency->getMarket());
}
}
}
поэтому в основном то, что я делаю, я создаю документы, которые присваиваются агентствам, и эти агентства принадлежат разным рынкам. Поскольку агентств больше, чем рынков, и я не хочу, чтобы там были дублирующие рынки, я выполнил условие if. Теперь добавление работает отлично. Но когда я хочу отредактировать свой документ и, например, удалить агентство из, скажем, США (= рынок), и нет другого агентства из США, назначенного для документа, я хочу, чтобы США были полностью удалены из этого документа. Я застрял с логикой этого.
Таким образом, если агентство / рынок, подлежащий удалению, не содержится на остальных рынках, его следует удалить, но если с этого рынка осталось еще одно агентство, рынок (конечно) не должен быть удален.
Рынки и агентства являются объектами ArrayCollections в сущности моего документа, поэтому функция removeMarket существует!
1 ответ
По моему, с этой структурой Document -> Agency -> Market
Создайте новый массив $this->market из агентств в preFlush.
ИЛИ ЖЕ
Создайте метод getMarkets() и возвращайте рынки от агентств, когда вам нужно.