Как используя \Bitrix\Catalog\ProductTable::getList получить список товаров по определённому инфоблоку?

Пробую получить список товаров по определённому инфоблоку Bitrix испольуяю D7 метод \Bitrix\Catalog\ProductTable::getList следующим кодом:

<?php
require $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php';

$result = \Bitrix\Catalog\ProductTable::getList(array(
    'filter' => array("=ELEMENT_IBLOCK_ID"=>46),
));

if($product=$result->fetch()) {
  var_dump($product);
}


Получаю такую ошибку:

[Bitrix\Main\SystemException]
Unknown field definition `ELEMENT_IBLOCK_ID` (ELEMENT_IBLOCK_ID) for Product Entity. (100)
/var/www/u0073302/data/www/leader-t.ru/bitrix/modules/main/lib/orm/query/chain.php:346

В документации тут https://dev.1c-bitrix.ru/api_help/catalog/classes/... написано что Код инфоблока товара это ELEMENT_IBLOCK_ID. Тогда почему ошибка? Если указываю IBLOCK_ID то ошибка аналогинчая, а если в фильтре указать например Id-товара, то есть используя ключ ID то нормально отрабатывает.
  • Вопрос задан
  • 3551 просмотр
Решения вопроса 2
@PetrPo
Это странно, использовать d7 и ориентироваться на документацию по методу старого ядра.

Если откроешь таблицу b_catalog_product (к которой ты делаешь запрос) то увидишь что там нет такого поля.

Если инфа нужна по полям элемента инфоблока (без полей которые относятся к каталогу), то надо использовать методы соответствующего модуля \Bitrix\Iblock\ElementTable::getList - здесь есть поле IBLOCK_ID

В твоем случае, если открыть файл с описанием сущности /bitrix/modules/catalog/lib/product.php в методе getMap можно увидеть описание связи
'IBLOCK_ELEMENT' => new Main\Entity\ReferenceField(
	'IBLOCK_ELEMENT',
	'\Bitrix\Iblock\Element',
	array('=this.ID' => 'ref.ID'),
	array('join_type' => 'LEFT')
),

Это значит что к полям сущности описанной в классе \Bitrix\Iblock\ElementTable можно обращаться через этот ключ
'filter' => array("IBLOCK_ELEMENT.IBLOCK_ID"=>46),
Ответ написан
nikolaevevge
@nikolaevevge Автор вопроса
<?php
require $_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php';

$result = \Bitrix\Catalog\ProductTable::getList(array(
    'filter' => array("=IBLOCK_ELEMENT.IBLOCK_ID"=>46),
));

if($product=$result->fetch()) {
  var_dump($product);
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы