• Модуль: disk
  • Путь к файлу: ~/bitrix/modules/disk/lib/internals/datamanager.php
  • Класс: BitrixDiskInternalsDataManager
  • Вызов: DataManager::merge
static function merge(array $data)
{
	$result = new AddResult();

	$helper = Application::getConnection()->getSqlHelper();
	$insertData = $data;
	$updateData = $data;
	$mergeFields = static::getPrimaryFieldsForMerge();
	foreach ($mergeFields as $field)
	{
		unset($updateData[$field]);
	}

	// use save modifiers
	$entity = static::getEntity();
	foreach ($updateData as $fieldName => $value)
	{
		$field = $entity->getField($fieldName);
		$updateData[$fieldName] = $field->modifyValueBeforeSave($value, $updateData);
	}
	foreach ($insertData as $fieldName => $value)
	{
		$field = $entity->getField($fieldName);
		$insertData[$fieldName] = $field->modifyValueBeforeSave($value, $insertData);
	}

	$merge = $helper->prepareMerge(
		static::getTableName(),
		static::getPrimaryFieldsForMerge(),
		$insertData,
		$updateData
	);

	if ($merge[0] != "")
	{
		Application::getConnection()->query($merge[0]);
		$id = Application::getConnection()->getInsertedId();
		$result->setId($id);
		$result->setData($data);
	}
	else
	{
		$result->addError(new Error('Error constructing query'));
	}

	return $result;
}