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

	// delete relations
	foreach ($this->entity->getFields() as $field)
	{
		if ($field instanceof Reference)
		{
			if ($field->getCascadeDeletePolicy() === CascadePolicy::FOLLOW)
			{
				/** @var EntityObject $remoteObject */
				$remoteObject = $this->sysGetValue($field->getName());
				$remoteObject->delete();
			}
		}
		elseif ($field instanceof OneToMany)
		{
			if ($field->getCascadeDeletePolicy() === CascadePolicy::FOLLOW)
			{
				// delete
				$collection = $this->sysFillRelationCollection($field);

				foreach ($collection as $object)
				{
					$object->delete();
				}
			}
			elseif ($field->getCascadeDeletePolicy() === CascadePolicy::SET_NULL)
			{
				// set null
				$this->sysRemoveAllFromCollection($field->getName());
			}
		}
		elseif ($field instanceof ManyToMany)
		{
			if ($field->getCascadeDeletePolicy() === CascadePolicy::FOLLOW_ORPHANS)
			{
				// delete
			}
			elseif ($field->getCascadeDeletePolicy() === CascadePolicy::SET_NULL)
			{
				// set null
			}

			// always delete mediator records
			$this->sysRemoveAllFromCollection($field->getName());
		}
	}

	$this->sysSaveRelations($result);

	// delete object itself
	$dataClass = static::$dataClass;
	$dataClass::setCurrentDeletingObject($this);
	$deleteResult = $dataClass::delete($this->primary);

	if (!$deleteResult->isSuccess())
	{
		$result->addErrors($deleteResult->getErrors());
	}

	// clear status
	foreach ($this->entity->getPrimaryArray()as $primaryName)
	{
		unset($this->_actualValues[$primaryName]);
	}

	$this->sysChangeState(State::DELETED);

	return $result;
}