• Модуль: tasks
  • Путь к файлу: ~/bitrix/modules/tasks/lib/internals/database/mesh.php
  • Класс: BitrixTasksInternalsDataBaseMesh
  • Вызов: Mesh::insertEdge
static function insertEdge($from, $to, $direct = true, $increment = 0, array $behaviour = array('INCREMENT_MP_WHEN_EXISTS' => true))
{
	//$behaviour['LINK_DATA']
	$connection = Application::getConnection();
	$helper = $connection->getSqlHelper();

	$idColName = static::getIDColumnName();
	$parentIdColName = static::getPARENTIDColumnName();
	$mpcityColName = static::getMPCITYColumnName();
	$directColName = static::getDIRECTColumnName();

	$additionalFldsMap = array();
	$additionalFldsValues = array();
	if (
		isset($behaviour['LINK_DATA'])
		&& is_array($behaviour['LINK_DATA'])
		&& !empty($behaviour['LINK_DATA'])
	)
	{
		$additionalFldsMap = array_keys($behaviour['LINK_DATA']);
		$additionalFldsValues = $behaviour['LINK_DATA'];
	}

	$values = array_merge(array(
		$idColName => 		$to,
		$parentIdColName => $from,
		$directColName => 	$direct,
		$mpcityColName => 	$increment > 0 ? $increment : 1,
	), $additionalFldsValues);

	if(($behaviour['INCREMENT_MP_WHEN_EXISTS'] ?? false) === true)
	{
		$plus = '+'.($increment > 0 ? $increment : '1');
	}
	else
	{
		$plus = '';
	}

	$merge = $helper->prepareMerge(
		static::getTableName(),
		array($idColName, $parentIdColName), // primary key
		$values,
		array(
			$mpcityColName => new BitrixMainDBSqlExpression($mpcityColName.$plus),
		)
	);

	if ($merge[0] != "")
	{
		$connection->query($merge[0]);
		return true;
	}

	return false;
}