Задать вопрос
@sr36

Как в Bitrix D7 сделать фильтр по количеству при join запросах?

Добрый день.
Стоит задача получить все товары с количеством на всех складах > n.
Причем, должна быть возможность ограничить условие определенными складами.
Например, выбрать все товары, с суммарным количеством на складах 3,8 и 12 - больше 9 штук

Вот что получилось написать на данный момент

$query = new \Bitrix\Main\Entity\Query(\Bitrix\Iblock\ElementTable::getEntity());
        $query->setSelect(["ID", "price","store"])
            ->setFilter([
                "IBLOCK_ID" => $this->iblockId,
                "IBLOCK_SECTION_ID" => $this->iblockSectionId,
                "ACTIVE" => "Y",
                "price.CATALOG_GROUP_ID" => 1,
                ">price.PRICE" => 0
            ])
            ->setOrder(array("ID" => "ASC"))
            ->setLimit(10);

        /**
         * Join таблицы с ценами
         */
        $query->registerRuntimeField("price",[
            "data_type" => "\Bitrix\Catalog\PriceTable",
            'reference' => [
                'this.ID' => 'ref.PRODUCT_ID'
            ],
        ]);

        $query->registerRuntimeField("store",[
            "data_type" => "\Bitrix\Catalog\StoreProductTable",
            'reference' => [
                'this.ID' => 'ref.PRODUCT_ID'
            ],
        ]);

        $elements = $query->exec();

А дальше вообще не понимаю, запутался
  • Вопрос задан
  • 1443 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@sr36 Автор вопроса
Решил следующим образом
$query->registerRuntimeField("store",[
            "data_type" => "\Bitrix\Catalog\StoreProductTable",
            'reference' => [
                'this.ID' => 'ref.PRODUCT_ID'
            ],
        ]);

        $query->registerRuntimeField("DETAIL_AMOUNT",[
            "data_type" => "integer",
            "expression" => array("sum(%s)", "store.AMOUNT")
        ]);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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