Как удалить удаленную запись из логики массива в 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 существует!


person sonja    schedule 12.09.2017    source источник


Ответы (1)


Для меня с этой структурой Document -> Agency -> Market

Создайте новый массив $this->markets из агентств в preFlush.

OR

Создайте метод getMarkets() и возвращайте рынки от агентств, когда вам нужно.

person Maxi Schvindt    schedule 12.09.2017
comment
Я сказал вам, что у меня уже есть этот метод. Взгляните на мой последний абзац: Рынки и Агентства являются ArrayCollections в моем объекте документа, поэтому функция removeMarket существует! У меня проблемы с логикой! - person sonja; 12.09.2017
comment
Я не совсем понимаю, что вы имеете в виду. Я уже понял, что мне придется использовать метод preFlush. Но меня интересует ЛОГИКА. так как будет выглядеть мое условие if или foreach или что-то еще, что мне нужно. Как я могу проверить, должен ли быть удален маркет или нет.. - person sonja; 12.09.2017
comment
Хорошо, эта логика находится в объекте preFlush of Document? - person Maxi Schvindt; 12.09.2017
comment
это еще не там, потому что я не знаю, с чего начать! - person sonja; 12.09.2017