Посчитать число покупок конкретного товара (не дисплея):
$product_id = 123;
$query = db_select('field_data_commerce_product', 'fcp');
$query->addExpression('COUNT(*)');
$query->innerJoin('commerce_line_item', 'l', 'l.line_item_id = fcp.entity_id');
$query->innerJoin('commerce_order', 'o', 'o.order_id = l.order_id');
$query->condition('o.status', 'completed');
$query->condition('fcp.commerce_product_product_id', $product_id);
$count = $query->execute()->fetchField();
Чтобы посчитать число покупок всех товаров одного дисплея можно обойти товары в цикле и сложить результат прошлого запроса, а можно добавить пару лишних джоинов:
$product_display_nid = 123;
$query = db_select('node', 'n');
$query->addExpression('COUNT(*)');
$query->innerJoin('field_data_field_product', 'ffp', 'ffp.entity_id = n.nid');
$query->innerJoin('field_data_commerce_product', 'fcp', 'fcp.commerce_product_product_id = ffp.field_product_product_id');
$query->innerJoin('commerce_line_item', 'l', 'l.line_item_id = fcp.entity_id');
$query->innerJoin('commerce_order', 'o', 'o.order_id = l.order_id');
$query->condition('o.status', 'completed');
$query->condition('n.nid', $product_display_nid);
$count = $query->execute()->fetchField();
Запросы актуальны для дефолтных названий полей:
$product_display->field_product
$line_item->commerce_product
Написанное актуально для
Commerce 1
Похожие записи
Комментарии
Спасибо, сэкономили мне время на написание запроса.
Рано обрадовался. Приведенный запрос не считает количество заказанных товаров, а следовательно выдает не верные значения.
То есть, если в заказе скажем 5 штук какого либо товара, приведенный выше запрос посчитает только 1 шт. из этого заказа.
Этот запрос считает с учётом количества заказанных товаров в заказе.
Нашёл еще один баг. В commerce могут быть "осиротевшие" line-items, которые были удалены из заказа, но фактически остались в БД. и их тоже посчитает вышеприведенный запрос. Что бы этого не происходило и в расчёт не брались эти "осиротевшие" line-items пользуемся этим запросом:
Мне нужно вывести поле с количеством купленных товаров в самой ноде с дисплеем товара, только не понимаю куда Ваш запрос добавить?
Добавить комментарий