• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/orm/data/datamanager.php
  • Класс: Bitrix\Main\ORM\Data\DataManager
  • Вызов: DataManager::delete
static function delete($primary)
{
	global $USER_FIELD_MANAGER;

	// check primary
	static::normalizePrimary($primary);
	static::validatePrimary($primary);

	$entity = static::getEntity();
	$result = new DeleteResult();

	$entityClass = static::getEntity()->getDataClass();
	$primaryAsString = EntityObject::sysSerializePrimary($primary, static::getEntity());

	$object = !empty(static::$currentDeletingObjects[$entityClass][$primaryAsString])
		? static::$currentDeletingObjects[$entityClass][$primaryAsString]
		: static::wakeUpObject($primary);

	try
	{
		//event before delete
		static::callOnBeforeDeleteEvent($object, $entity, $result);

		// return if any error
		if (!$result->isSuccess(true))
		{
			return $result;
		}

		//event on delete
		static::callOnDeleteEvent($object, $entity);

		// delete
		$connection = $entity->getConnection();
		$helper = $connection->getSqlHelper();

		$tableName = $entity->getDBTableName();

		$replacedPrimary = static::replaceFieldName($primary);
		$id = array();
		foreach ($replacedPrimary as $k => $v)
		{
			$id[] = $helper->prepareAssignment($tableName, $k, $v);
		}
		$where = implode(' AND ', $id);

		$sql = "DELETE FROM ".$helper->quote($tableName)." WHERE ".$where;
		$connection->queryExecute($sql);

		// delete uf data
		if ($entity->getUfId())
		{
			$USER_FIELD_MANAGER->delete($entity->getUfId(), end($primary));
		}

		static::cleanCache();

		//event after delete
		static::callOnAfterDeleteEvent($object, $entity);
	}
	catch (\Exception $e)
	{
		// check result to avoid warning
		$result->isSuccess();

		throw $e;
	}
	finally
	{
		// clean temporary objects
		if (!empty(static::$currentDeletingObjects[$entityClass][$primaryAsString]))
		{
			unset(static::$currentDeletingObjects[$entityClass][$primaryAsString]);
		}
	}

	return $result;
}