• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/requisite/link.php
  • Класс: Bitrix\Crm\Requisite\LinkTable
  • Вызов: LinkTable::upsert
static function upsert(array $data)
{
	$connection = Main\Application::getConnection();

	$entityTypeId = isset($data['ENTITY_TYPE_ID']) ? (int)$data['ENTITY_TYPE_ID'] : 0;
	$entityId = isset($data['ENTITY_ID']) ? (int)$data['ENTITY_ID'] : 0;
	$requisiteId = isset($data['REQUISITE_ID']) ? (int)$data['REQUISITE_ID'] : 0;
	$bankDetailId = isset($data['BANK_DETAIL_ID']) ? (int)$data['BANK_DETAIL_ID'] : 0;
	$mcRequisiteId = isset($data['MC_REQUISITE_ID']) ? (int)$data['MC_REQUISITE_ID'] : 0;
	$mcBankDetailId = isset($data['MC_BANK_DETAIL_ID']) ? (int)$data['MC_BANK_DETAIL_ID'] : 0;

	if($connection instanceof Main\DB\MysqlCommonConnection)
	{
		$connection->queryExecute( /** @lang MySQL */
			"INSERT INTO b_crm_requisite_link (ENTITY_TYPE_ID, ENTITY_ID, REQUISITE_ID, BANK_DETAIL_ID, ".
			"MC_REQUISITE_ID, MC_BANK_DETAIL_ID)".PHP_EOL.
			"VALUES ({$entityTypeId}, {$entityId}, {$requisiteId}, {$bankDetailId}, {$mcRequisiteId}, ".
			"{$mcBankDetailId})".PHP_EOL.
			"ON DUPLICATE KEY UPDATE ".
			"REQUISITE_ID = {$requisiteId}, BANK_DETAIL_ID = {$bankDetailId}, ".
			"MC_REQUISITE_ID = {$mcRequisiteId}, MC_BANK_DETAIL_ID = {$mcBankDetailId}".PHP_EOL
		);
	}
	elseif($connection instanceof Main\DB\MssqlConnection)
	{
		$dbResult = $connection->query( /** @lang TSQL */
			"SELECT 'X'".PHP_EOL.
			"FROM B_CRM_REQUISITE_LINK".PHP_EOL.
			"WHERE ENTITY_TYPE_ID = {$entityTypeId} AND ENTITY_ID = {$entityId}".PHP_EOL
		);

		if(is_array($dbResult->fetch()))
		{
			$connection->queryExecute( /** @lang TSQL */
				"UPDATE B_CRM_REQUISITE_LINK".PHP_EOL.
				"  SET REQUISITE_ID = {$requisiteId}, BANK_DETAIL_ID = {$bankDetailId}, ".
				"MC_REQUISITE_ID = {$mcRequisiteId}, MC_BANK_DETAIL_ID = {$mcBankDetailId}".PHP_EOL.
				"WHERE ENTITY_TYPE_ID = {$entityTypeId} AND ENTITY_ID = {$entityId}".PHP_EOL
			);
		}
		else
		{
			$connection->queryExecute( /** @lang TSQL */
				"INSERT INTO B_CRM_REQUISITE_LINK (ENTITY_TYPE_ID, ENTITY_ID, REQUISITE_ID, BANK_DETAIL_ID, ".
				"MC_REQUISITE_ID, MC_BANK_DETAIL_ID)".PHP_EOL.
				"VALUES ({$entityTypeId}, {$entityId}, {$requisiteId}, {$bankDetailId}, {$mcRequisiteId}, ".
				"{$mcBankDetailId})".PHP_EOL
			);
		}
	}
	elseif($connection instanceof Main\DB\OracleConnection)
	{
		$connection->queryExecute( /** @lang Oracle */
			"MERGE INTO B_CRM_REQUISITE_LINK".PHP_EOL.
			"USING (SELECT {$entityTypeId} ENTITY_TYPE_ID, {$entityId} ENTITY_ID, {$requisiteId} REQUISITE_ID, ".
			"{$bankDetailId} BANK_DETAIL_ID, {$mcRequisiteId} MC_REQUISITE_ID, ".
			"{$mcBankDetailId} MC_BANK_DETAIL_ID FROM dual) source".PHP_EOL.
			"ON (".PHP_EOL.
			"	source.ENTITY_TYPE_ID = B_CRM_REQUISITE_LINK.ENTITY_TYPE_ID".PHP_EOL.
			"	AND source.ENTITY_ID = B_CRM_REQUISITE_LINK.ENTITY_ID".PHP_EOL.
			")".PHP_EOL.
			"WHEN MATCHED THEN".PHP_EOL.
			"  UPDATE SET B_CRM_REQUISITE_LINK.REQUISITE_ID = {$requisiteId}, ".
			"B_CRM_REQUISITE_LINK.BANK_DETAIL_ID = {$bankDetailId}, ".
			"B_CRM_REQUISITE_LINK.MC_REQUISITE_ID = {$mcRequisiteId}, ".
			"B_CRM_REQUISITE_LINK.MC_BANK_DETAIL_ID = {$mcBankDetailId}".PHP_EOL.
			"WHEN NOT MATCHED THEN".PHP_EOL.
			"  INSERT (ENTITY_TYPE_ID, ENTITY_ID, REQUISITE_ID, BANK_DETAIL_ID, MC_REQUISITE_ID, ".
			"MC_BANK_DETAIL_ID)".PHP_EOL.
			"  VALUES ({$entityTypeId}, {$entityId}, {$requisiteId}, {$bankDetailId}, {$mcRequisiteId}, ".
			"{$mcBankDetailId})".PHP_EOL
		);
	}
	else
	{
		$dbType = $connection->getType();
		throw new Main\NotSupportedException("The '{$dbType}' is not supported in current context");
	}
}