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