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

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

Внимание! Необходимо выполнять сохранение через заказ: \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 группы
    

Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Евгений Иванов
Сообщение не промодерировано, возможны ошибки и неточности.
// Ошибка


 
$code1 = 'TEST_1'; // Это свойство пропадет =(  
$code2 = 'TEST_2'; // А это останется =)  
 
$orderId = 603945;  
$order = \Bitrix\Sale\Order::load($orderId);  
 
var_dump(is_null($order->getPropertyCollection()->getItemByOrderPropertyCode($code1)));  
var_dump(is_null($order->getPropertyCollection()->getItemByOrderPropertyCode($code2)));  
 
$collection = $order->getPropertyCollection();  
$propertyValue = \Bitrix\Sale\PropertyValue::create(  
   $collection,  
   [  
       'NAME' => $code1,  
       'TYPE' => 'STRING',  
       'CODE' => $code1,  
   ]  
);  
$propertyValue->setField('VALUE', 'Это свойство пропадет =(');  
$collection->addItem($propertyValue);  
 
$collection = $order->getPropertyCollection();  
$propertyValue = \Bitrix\Sale\PropertyValue::create(  
   $collection,  
   [  
       'NAME' => $code2,  
       'TYPE' => 'STRING',  
       'CODE' => $code2,  
   ]  
);  
 
$propertyValue->setField('VALUE', 'А это останется =)');  
$collection->addItem($propertyValue);  
 
var_dump(is_null($order->getPropertyCollection()->getItemByOrderPropertyCode($code1)));  
var_dump(is_null($order->getPropertyCollection()->getItemByOrderPropertyCode($code2)));  
 
$order->save();



//usr/share/nginx/test.php:37:boolean true
//usr/share/nginx/test.php:38:boolean false
//usr/share/nginx/test.php:65:boolean false
//usr/share/nginx/test.php:66:boolean false
0
Евгений Иванов
Сообщение не промодерировано, возможны ошибки и неточности.
Ошибка$code1 = 'TEST_1'; // Это свойство пропадет =(
$code2 = 'TEST_2'; // А это останется =)

$orderId = 603945;
$order = \Bitrix\Sale\Order::load($orderId);

var_dump($order->getPropertyCollection()->getItemByOrderPropertyCode($code1));
var_dump($order->getPropertyCollection()->getItemByOrderPropertyCode($code2));

$collection = $order->getPropertyCollection();
$propertyValue = \Bitrix\Sale\PropertyValue::create(
   $collection,
   [
       'NAME' => $code1,
       'TYPE' => 'STRING',
       'CODE' => $code1,
   ]
);
$propertyValue->setField('VALUE', 'Это свойство пропадет =(');
$collection->addItem($propertyValue);

$collection = $order->getPropertyCollection();
$propertyValue = \Bitrix\Sale\PropertyValue::create(
   $collection,
   [
       'NAME' => $code2,
       'TYPE' => 'STRING',
       'CODE' => $code2,
   ]
);

$propertyValue->setField('VALUE', 'А это останется =)');
$collection->addItem($propertyValue);

$order->save();

///usr/share/nginx/test.php:14:null
///usr/share/nginx/test.php:15:
//object(Bitrix\Sale\PropertyValue)
Если указывать ID, то оно конфликтует со свойствами добавленными в b_sale_order_props.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх