0

我花了很多时间来解决这个问题,但我不明白:(我需要从一个特殊类别中选择所有订购的物品。如何过滤 Collection,例如 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();
... ?>

谢谢大家帮助我,最好的,瑞克

4

2 回答 2

2

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

所以我猜你必须使用: $collection->getSelect()->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

于 2013-08-01T08:25:38.967 回答
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);
}
于 2013-07-31T16:31:16.517 回答