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

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

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