Документация Doctrine 2 гласит, что:
Удаление ассоциации между двумя объектами также просто. Для этого есть две стратегии: по ключу и по элементу.
Что значит "по ключу"? Это поле id связанного объекта или просто позиция связанного объекта в коллекции? Например, здесь используется $ithComment (это позиция комментария):
// Remove by Key
$user->getComments()->remove($ithComment);
$comment->setAuthor(null);
Ответ 1 · рейтинг 1 · Lee Davis
Это позиция связанного объекта в коллекции. При проверке ArrayCollection..
public function add($value)
{
$this->_elements[] = $value;
return true;
}
public function remove($key)
{
if (isset($this->_elements[$key])) {
$removed = $this->_elements[$key];
unset($this->_elements[$key]);
return $removed;
}
return null;
}
Вы можете видеть, что ссылка на идентификатор элементов коллекции не используется.
Ответ 3 · sebob
У меня есть решение, может быть, это хорошо для вас:
public function addSectors(ArrayCollection $sectors)
{
foreach($sectors as $k => $sector) {
$this->addSector($sector);
}
}
public function removeSectors($sectors)
{
foreach($sectors as $k => $sector) {
unset($this->sectors[$k]);
}
}