注文アイテムを示すグリッドがあります。各商品の商品詳細を表示したい。しかし、いくつかは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')));
正しい注文アイテムが表示されているようです。これは適切な方法ですか?