Свойства корзины
Внимание! Если корзина привязана к заказу, то использовать метод \Bitrix\Sale\Basket::save() для сохранения категорически запрещается. Необходимо выполнять сохранение через заказ: \Bitrix\Sale\Order::save(). Помимо всего этого в одной из ближайших версий вызов \Bitrix\Sale\BasketPropertiesCollection::save() будет генерировать ошибку уровня E_WARNING.
Добавление
// $basket – объект класса \Bitrix\Sale\Basket
foreach ($basket as $basketItem)
{
$collection = $basketItem->getPropertyCollection();
$item = $collection->createItem();
$item->setFields(
[
'NAME' => 'Новое свойство',
'CODE' => 'XXX',
'VALUE' => 'Значение',
]
);
}
Получение
- Работа с коллекцией
$collection = $basketItem->getPropertyCollection(); foreach ($collection as $item) { // $item – объект класса \Bitrix\Sale\BasketPropertyItem } -
Работа с массивом
Помимо объектов есть возможность напрямую обращаться к базе через метод
\Bitrix\Sale\BasketPropertiesCollection::getList($parameters).Метод всегда возвращает объект
Bitrix\Main\DB\Result, из которого можно получить данные с помощью методаfetch().Параметр Описание С версии $parameters Массив, структура которого полностью соответствует структуре ORM'ного getList. // получение списка свойств для товара с кодом 123 $dbRes = \Bitrix\Sale\BasketPropertiesCollection::getList( [ 'select' => ['*'], 'filter' => [ '=BASKET_ID' => 123, ] ] ); while ($item = $dbRes->fetch()) { var_dump($item); }
Обновление
// $basketItem – объект класса \Bitrix\Sale\BasketItem
$collection = $basketItem->getPropertyCollection();
$property = $collection->getItemById(123);
$property->setField('VALUE', 'Новое значение');
'NAME', // название свойства
'VALUE', // значение свойства
'CODE', // код свойства
'SORT', // сортировка
'XML_ID' // внешний код
Удаление
// $basketItem – объект класса \Bitrix\Sale\Basket $collection = $basketItem->getPropertyCollection(); $property = $collection->getItemById(123); $property->delete();
Получение конкретного свойства
$collection = $baketItem->getPropertyCollection();
- по ID
$property = $collection->getItemById($id);
- по внутреннему индексу
$property = $collection->getItemByIndex($index);
Перезапись всех имеющихся свойств
Метод \Bitrix\Sale\BasketPropertiesCollection::redefine работает следующим образом:
- если свойство есть в коллекции, но отсутствует во входных данных, то свойство будет удалено
- если свойство есть в коллекции, а так же присутствует во входных данных, то свойство обновится
- если свойства нет в коллекции, но присутствует во входных данных, то свойство добавится
// $basket – объект класса \Bitrix\Sale\BasketBase
foreach ($basket as $basketItem)
{
$collection = $basketItem->getPropertyCollection();
$collection->redefine(
[
[
'NAME' => 'Новое свойство',
'CODE' => 'XXX',
'VALUE' => 'Значение',
]
]
);
}
© «Битрикс», 2001-2025, «1С-Битрикс», 2025