Документация для разработчиков
Темная тема

Значения свойств заказа

Внимание! Необходимо выполнять сохранение через заказ: \Bitrix\Sale\Order::save(). Помимо всего этого, в одной из ближайших версий вызов \Bitrix\Sale\PropertyValueCollection::save() либо \Bitrix\Sale\PropertyValue::save() будет генерировать ошибку уровня E_WARNING.


Получение

  • Работа с объектами
    $collection = $order->getPropertyCollection();
    foreach ($collection as $item)
    {
    	// $item – объект класса \Bitrix\Sale\PropertyValue
    }
  • Работа с массивами

    Помимо объектов есть возможность напрямую обращаться к базе через метод \Bitrix\Sale\PropertyValueCollection::getList($parameters), либо \Bitrix\Sale\PropertyValue::getList($parameters). Оба этих метода работают аналогично.

    Методы всегда возвращают объект Bitrix\Main\DB\Result, из которого можно получить данные с помощью метода fetch().

    Параметр Описание С версии
    $parameters Массив, структура которого полностью соответствует структуре ORM'ного getList.
    // получение списка свойств для заказа с ID 123
    $dbRes = \Bitrix\Sale\PropertyValueCollection::getList([
    	'select' => ['*'],
    	'filter' => [
    		'=ORDER_ID' => 123, 
    	]
    ]);
    
    while ($item = $dbRes->fetch())
    {
    	var_dump($item);
    }
  • Получение конкретного значения.
    $propertyValue = $collection->getItemByOrderPropertyCode($code);
  • Работа со свойствами, как с коллекцией.
  • $propertyCollection = $order->getPropertyCollection();
    foreach($propertyCollection as $popertyObj)
    {
    	if($popertyObj->getField('CODE') == "CODE1") $someValue1 = $popertyObj->getValue();
    	if($popertyObj->getField('CODE') == "CODE2") $popertyObj->setValue($someValue2);
    }

Обновление

$order = \Bitrix\Sale\Order::load(123);
$collection = $order->getPropertyCollection();
$propertyValue = $collection->getItemById(123);
$r = $propertyValue->setField('VALUE', 'Новое значение');
if (!$r->isSuccess())
{
	var_dump($r->getErrorMessages());
}

$order->save();

Доступное для редактирования поле:

"VALUE", // значение свойства

Удаление

$order = \Bitrix\Sale\Order::load(123);
$collection = $order->getPropertyCollection();
$propertyValue = $collection->getItemById(123);
$propertyValue->delete();

$order->save();

Получение конкретного значения

$collection = $order->getPropertyCollection();
  • по ID
    $propertyValue = $collection->getItemById($id);
  • по внутреннему индексу
    $propertyValue = $collection->getItemByIndex($index);
  • по ID самого свойства
    $propertyValue = $collection->getItemByOrderPropertyId($propertyId);
  • геттеры для значений ключевых свойств(телефон, email, имя, адрес и т.д.)
    $propertyValue = $collection->getAddress();
    $propertyValue = $collection->getPhone();
    $propertyValue = $collection->getProfileName();
    $propertyValue = $collection->getTaxLocation();
    $propertyValue = $collection->getDeliveryLocationZip();
    $propertyValue = $collection->getDeliveryLocation();
    $propertyValue = $collection->getPayerName();
    $propertyValue = $collection->getUserEmail();

Добавление свойства

  • Вариант 1:
    $propertyValue = $collection->createItem(
    	[
    		'ID' => 1,
    		'NAME' => 'Новое свойство',
    		'TYPE' => 'STRING',
    		'CODE' => 'NEW_PROP',
    	]
    );
    
    $propertyValue->setField('VALUE', 'Y');
  • Вариант 2:
    $propertyValue = \Bitrix\Sale\PropertyValue::create(
    	$collection,
    	[
    		'ID' => 1,
    		'NAME' => 'Новое свойство',
    		'TYPE' => 'STRING',
    		'CODE' => 'NEW_PROP',
    	]
    );
    
    $propertyValue->setField('VALUE', 'Свойство_3');
    $collection->addItem($propertyValue);

Получение информации о свойстве, значение которого хранится в заказе

  • Работа с массивом
    $propertyInfo = $propertyValue->getProperty();

    Результатом является массив с ключами:

    'ID', // ID свойства
    'PERSON_TYPE_ID', // ID типа плательщика, к которому оно привязано
    'NAME', // Название свойства
    'TYPE', // Тип
    'REQUIRED', // Флаг обязательности
    'DEFAULT_VALUE', // Значение по умолчанию
    'SORT', // Сортировка
    'USER_PROPS', // Входит ли в профиль
    'IS_LOCATION', // Является ли местоположением
    'PROPS_GROUP_ID', // ID группы
    'DESCRIPTION',  // Описание
    'IS_EMAIL', // Является ли почтой
    'IS_PROFILE_NAME', // Является ли названием профиля пользователя
    'IS_PAYER', // Используется ли как имя плательщика 
    'IS_LOCATION4TAX', // Используется ли как местоположение для налогов
    'IS_FILTERED', // Доступно ли в фильтре по заказам
    'CODE', // Код
    'IS_ZIP', // Используется ли как почтовый индекс
    'IS_PHONE', // Является ли телефоном
    'IS_ADDRESS', // Является ли адресом
    'ACTIVE', // Флаг активности
    'UTIL', // Флаг служебности
    'INPUT_FIELD_LOCATION', 
    'MULTIPLE',// Флаг множественности
    'MINLENGTH', // Минимальная длина строки
    'MAXLENGTH', // Максимальная длина строки
    'PATTERN', // Регулярное выражение для проверки
    'MULTILINE', // Много строк
    'SIZE', // Количество видимых символов
  • Работа с объектом
    $property = $propertyValue->getPropertyObject();

    Любое значение можно получить, используя метод:

    $property->getField('SIZE');

    Для некоторых наиболее популярных полей реализованы геттеры:

    $property->getId(); // ID свойства
    $property->getPersonTypeId(); // ID типа плательщика, к которому оно привязано
    $property->isUtil(); // является ли служебным
    $property->isRequired(); // является ли обязательным
    $property->getType(); // тип 
    $property->getDescription(); // описание
    $property->getRelations(); // связи
    $property->getName(); // название
    $property->getGroupId(); // ID группы
    
© «Битрикс», 2001-2024, «1С-Битрикс», 2024