Magento:如何按特定类别过滤集合(销售/订单)?

时间:2013-07-31 15:26:14

标签: magento

我花了很多时间来解决这个问题,但我不明白:( 我需要从特殊类别中选择所有订购的商品。如何过滤收藏品,例如对于categoryId'44'?

这是我的代码:

<?php
require_once '/home/web/public_html/app/Mage.php';
Mage::app();

//$_category = Mage::getModel('catalog/category')->load($category_id);

$salesCollection = Mage::getModel("sales/order")->getCollection();

echo $salesCollection->getSelect();

foreach ($salesCollection as $order) {
    $items = $order->getAllItems();
... ?>

感谢大家帮助我, 最好的,Rik

2 个答案:

答案 0 :(得分:2)

sales_flat_order_item数据库表对类别一无所知。

所以我想你必须使用:$ collection-&gt; getSelect() - &gt; join(.....);

在sales_flat_order_item(Mage :: getModel('sales / order'))中,您可以找到product_id。 在catalog_category_product(Mage :: getModel('catalog / category_product'))中,您可以找到category_id,product_id,position

现在你必须加入他们......

http://www.magentocommerce.com/wiki/1_-_installation_and_configuration/using_collections_in_magento

答案 1 :(得分:1)

这是一个(也许)不那么优雅的方法......

首先抓住您想要的类别中的所有产品

$category_id = 44;
$category = Mage::getModel("catalog/category")->load($category_id);
$products = Mage::getModel("catalog/product")->getCollection()
  ->addCategoryFilter($category);

接下来我只收集产品ID,以便我可以使用它们

$product_ids = array();
foreach ($products as $product)
  $product_ids[] = $product->getId();

抓取产品ID为我们类别

中的产品之一的所有订单商品
$items = Mage::getModel("sales/order_item")->getCollection()
  ->addFieldToFilter("product_id", array("in" => $product_ids));

现在获取项目引用的所有唯一订单

$orders = array();
foreach ($items as $item) {
  $order_id = $item->getOrderId();
  if (!isset($orders[$order_id]))
    $orders[$order_id] = Mage::getModel("sales/order")->load($order_id);
}