Wiki Bitrix

Сохранение записи (обновление существующей записи или ее создание)

Для сохранения записи, унаследованной от Entity\DataManager, можно делать проверку на существование, затем - обновлять, либо создавать новую.

В примере первичный ключ ID. Однако, фактически используется составной ключ ORDER_GUID PARENT_GUID.

Если запись будет найдена, она обновится. Иначе - создастся.

save.php
public static function save($data) {
  if(!isset($data['ORDER_GUID'], $data['PARENT_GUID'])) throw new \Bitrix\Main\ArgumentNullException("Wrong keys", 1);
 
  $list = self::getList([
    'select'  => ['ID'],
    'filter'  => ['=ORDER_GUID' => $data['ORDER_GUID'], '=PARENT_GUID' => $data['PARENT_GUID']],
    'limit'   => 1
  ]);
 
  if($list->getSelectedRowsCount() == 0) {
    return self::add($data);
  } else {
    $it = $list->fetch();
    return self::update($it['ID'], $data);
  }
 
}

Более простой вариант: создание или обновление записи по ID:

save_id.php
public static function save($data) {
  if(!isset($data['ID'])) {
    return self::add($data);
  }
  return self::update($data['ID'], $data);
}