Свойства корзины
Внимание! Если корзина привязана к заказу, то использовать метод \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-2024, «1С-Битрикс», 2024