function save() { Assert::isFalse($this->isReadonly(), 'cannot save readonly collections'); $getter = $this->referentialProperty->getGetter(); $setter = $this->referentialProperty->getSetter(); if ($this->referentialProperty->getMultiplicity()->isNullable()) { foreach ($this->getLostTracked() as $object) { $object->{$setter}(null); $object->save(); } } else { if (sizeof($this->getLostTracked())) { $query = new EntityQuery($this->getChildren()); $this->fillQuery($query); $query->andWhere(Expression::in($this->getChildren()->getLogicalSchema()->getIdentifier(), $this->getLostTracked())); $query->delete(); } } foreach ($this->getList() as $object) { // avoid useless mutation if ($object->{$getter}() !== $this->getParentObject()) { $object->{$setter}($this->getParentObject()); } $object->save(); } }