• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/orm/objectify/entityobject.php
  • Класс: BitrixMainORMObjectifyEntityObject
  • Вызов: EntityObject::sysRemoveFromCollection
public function sysRemoveFromCollection($fieldName, $remoteObject)
{
	$fieldName = StringHelper::strtoupper($fieldName);

	/** @var OneToMany $field */
	$field = $this->entity->getField($fieldName);
	$remoteObjectClass = $field->getRefEntity()->getObjectClass();

	// validate object class
	if (!($remoteObject instanceof $remoteObjectClass))
	{
		throw new ArgumentException(sprintf(
			'Expected instance of `%s`, got `%s` instead', $remoteObjectClass, get_class($remoteObject)
		));
	}

	/** @var Collection $collection Initialize collection */
	$collection = $this->sysGetValue($fieldName);

	if (empty($collection))
	{
		$collection = $field->getRefEntity()->createCollection();
		$this->_actualValues[$fieldName] = $collection;
	}

	// remove from collection
	$collection->remove($remoteObject);

	if ($field instanceof OneToMany)
	{
		// remove self from the object
		if ($field->getCascadeDeletePolicy() == CascadePolicy::FOLLOW)
		{
			// nothing to do
		}
		else
		{
			// set null by default
			$remoteFieldName = $field->getRefField()->getName();
			$remoteObject->sysSetValue($remoteFieldName, null);
		}

	}

	// mark object as changed
	if ($this->_state == State::ACTUAL)
	{
		$this->sysChangeState(State::CHANGED);
	}
}