- Модуль: 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;
}