0

注文アイテムを示すグリッドがあります。各商品の商品詳細を表示したい。しかし、いくつかはsimpleあり、いくつかはconfigurableです。

グリッド内のコレクションはですsales/order_item_collection

_prepareCollection()私はこれらの結合を持っています:

        $collection->getSelect()->join( 
           array('orders_alias' => $resource->getTableName('sales/order'))
           , 'main_table.order_id = orders_alias.entity_id'
           , array('orders_alias.increment_id', 'order_date' => 'orders_alias.created_at')
           , null);

    $collection->getSelect()->join( 
           array('p' => $resource->getTableName('catalog/product'))
           , 'main_table.product_id = p.entity_id
           , array('product_sku' => 'p.sku')
           , null); 

構成可能な製品を持つ注文アイテムの場合、余分な行が表示されます。
たとえば、誰かがXXLサイズのシャツを購入した場合、注文アイテムが2行表示されます。

目に見える製品だけを表示する必要があると思います。これはどのようにすればよいですか?

注文から行ってアイテムを表示すると、次のことができます。

    // get order items
    $items = $order->getAllVisibleItems();

しかし、アイテムが表示されているかどうかを確認する必要があります。

私を見\app\code\core\Mage\Sales\Model\Order.phpて:

    public function getAllVisibleItems()
{
    $items = array();
    foreach ($this->getItemsCollection() as $item) {
        if (!$item->isDeleted() && !$item->getParentItemId()) {
            $items[] =  $item;
        }
    }
    return $items;
}

したがって、このフィルターを追加すると、次のようになります。

$collection->addAttributeToFilter('parent_item_id', array('is' => new Zend_Db_Expr('null')));

正しい注文アイテムが表示されているようです。これは適切な方法ですか?

4

2 に答える 2

0

この行をどこに追加しますか?

$collection->addAttributeToFilter('parent_item_id', array('is' => new Zend_Db_Expr('null')));

0 の商品と実際の商品の商品が 2 つあります

http://i.stack.imgur.com/fx1bd.jpg

于 2013-03-27T22:48:54.320 に答える
0

現在、私はこのソリューションを使用しています:

$collection->addAttributeToFilter('parent_item_id', array('is' => new Zend_Db_Expr('null')));
于 2013-01-14T08:32:47.270 に答える