Почему не сохраняются свойства товара в корзине?

В методе добавления товара в корзину, добавляю к айтему свойства:
if ($props) {
                    $propertyCollection = $item->getPropertyCollection();
                    $propertyCollection->getPropertyValues();
                    $propertyCollection->setProperty($props);
                    $propertyCollection->save();
                    
                    $item->setPropertyCollection($propertyCollection);
                    
                    $arDebug['propertyCollection'] = $item->getPropertyCollection()->getPropertyValues();
}

Судя по возвращаемым значениям свойства успешно добавляются.

Но потом, при просмотре товаров в корзине у данного товара коллекция свойств пуста, как будт-то бы коллекция не сохранилась. В чем может быть проблема?

На всякий случай:
полный код метода

public function addProductAction (int $productid, int $quantity=1, array $props=[]): array
    {
        $arDebug = ['$productid' => $productid, '$quantity' => $quantity];
        if ($productid > 0) {
            if ($item = $this->basket->getExistsItem('catalog', $productid)) {
                $arDebug['action'] = 'update';
                $item->setField('QUANTITY', $item->getQuantity() + $quantity);
            } else {
                $arDebug['action'] = 'add';
                $item = $this->basket->createItem('catalog', $productid);
                
                $item->setFields([
                        'QUANTITY' => $quantity,
                        'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
                        'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
                        'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider'
                    ]);
                
                if ($props) {
                    $propertyCollection = $item->getPropertyCollection();
                    $propertyCollection->getPropertyValues();
                    $propertyCollection->setProperty($props);
                    $propertyCollection->save();
                    
                    $item->setPropertyCollection($propertyCollection);
                    
                    $arDebug['propertyCollection'] = $item->getPropertyCollection()->getPropertyValues();
                }
                
                $item->save();
            }
            $this->basket->save();
        }

        $arResponce = $this->getAction();
        if (APPLICATION_ENV == 'dev') $arResponce['debug'] = $arDebug;
        return $arResponce;
    }

  • Вопрос задан
  • 153 просмотра
Решения вопроса 1
Suntechnic
@Suntechnic Автор вопроса
Сам спросил - сам отвечаю. Перед добавление свойств в колекцию свойст айтема корзины его надо сохранить. Именно ПЕРЕД добавлением. Т.е. код должен быть такой:
$item->save();
                
                if ($props) {
                    $propertyCollection = $item->getPropertyCollection();
                    
                    $propertyCollection->setProperty($props);
                    $propertyCollection->save();
                    
                    $item->setPropertyCollection($propertyCollection);
                    
                    $arDebug['propertyCollection'] = $item->getPropertyCollection()->getPropertyValues();
                }

В этом случае все работает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы