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