tooyz / moysklad

Moysklad PHP JSON API library
MIT License
65 stars 57 forks source link

Как добавить группу в товаре #15

Closed powernic closed 7 years ago

powernic commented 7 years ago

не совсем понимаю принцип работы со связями. как правильно добавить группу?

$productFolder = ProductFolder::query($sklad,QuerySpecs::create([
                    "maxResults" => 1,
                    "limit" => 1
                ]))->filter(
                    (new FilterQuery())
                        ->eq("name", "INVINCE")
                )[0];
                $product = new Product($sklad, array(
                    "name" => $_POST['name'],
                    "code" => '52500',//(string)$this->diafan->id
                    "article" => $_POST['article'],
                    "weight" => (float)$_POST['weight'],
                    "volume" => $volume,//Объём
                    "pathName" => "Спиннинги/Спиннинги KOSADAKA/INVINCE",
                    "salePrices" => array(
                        array(
                            "value" => (float)$_POST['price'],
                            "priceType" => 'Цена продажи'
                        ),
                        array(
                            "value" => (float)($_POST['price'])*1.05,
                            "priceType" => 'Магазинная'
                        ),
                    )
                ));
                $linkSpecs = LinkingSpecs::create(["multiple" => true]);
                $product->buildUpdate()
                    ->addProductFolder($productFolder, $linkSpecs) ;
                $res = $product->create();
tooyz commented 7 years ago

Вы ведь создаете новый товар, а не обновляете существующий, нужно использовать buildCreation а не buildUpdate. buildCreation возвращает инстанс CreationBuilder, у которого есть метод execute для склеивания объекта и указанных связей и, собственно, создания объекта в апи. Функция create просто создает объект без связей. Примеры тут https://github.com/Tooyz/moysklad#Создание-обновление

powernic commented 7 years ago

@Tooyz Не добавляется группа, думаю проблема та же что и в тикете #3, productFolder передается как productfolder хотя требуется в api, чтобы было productFolder

powernic commented 7 years ago

Все норм, заменил линку

$build = $product->buildCreation()->addProductFolder($productFolder);
$links = $product->links->getLinks();
$links->productFolder = $links->productfolder;
unset( $links->productfolder );
$product->links->replace($links);
$build->execute();
max-kut commented 6 years ago

У меня получилось напрямик в товар вставить через links:

$msProduct = new msProduct($sklad, ['name'=>'товар']);
$msProductFolder = ProductFolder::query($sklad)->byId('ms_product_folder_id');
$msProduct->links->link($msProductFolder, LinkingSpecs::create([
    'name' => 'productFolder',
]));