• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/v2/BaseIblockElementRepository.php
  • Класс: BitrixCatalogv2BaseIblockElementRepository
  • Вызов: BaseIblockElementRepository::save
public function save(BaseEntity ...$entities): Result
{
	$result = new Result();

	$savedIds = [];

	foreach ($entities as $entity)
	{
		$entityId = $entity->getId();
		if ($entityId !== null)
		{
			$res = $this->updateInternal($entityId, $entity->getChangedFields());

			if ($res->isSuccess())
			{
				$savedIds[] = $entityId;
			}
			else
			{
				$result->addErrors($res->getErrors());
			}
		}
		else
		{
			$res = $this->addInternal($entity->getFields());

			if ($res->isSuccess())
			{
				$id = $res->getData()['ID'];
				$entity->setId($id);
				$savedIds[] = $id;
			}
			else
			{
				$result->addErrors($res->getErrors());
			}
		}
	}

	// re-initialize original fields from database after save (DETAIL_PICTURE, etc)
	if (!empty($savedIds))
	{
		$fields = $this->getList([
			'filter' => [
				'ID' => $savedIds,
			],
		]);

		foreach ($entities as $entity)
		{
			$entityFields = $fields[$entity->getId()] ?? null;
			if (!is_array($entityFields))
			{
				AddMessage2Log('Cannot load product ' . $entity->getId(), 'catalog');
				continue;
			}
			$entityFields = array_diff_key($entityFields, ['TYPE' => true]);

			if ($entityFields)
			{
				$entity->initFields($entityFields);
			}
		}
	}

	return $result;
}