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

Свойства корзины

Внимание! Если корзина привязана к заказу, то использовать метод \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