1

我想在magento的客户网格中显示订单数量

我以此为指导: 如何在 magento 1.7 中将客户“订单总数”和“总支出”添加到订单网格中

但这是一个不同的网格

到目前为止我已经创建:app/code/local/Mage/Adminhtml/Block/Customer/Grid.php

_prepareCollection

我补充说:

    $orderTableName = Mage::getSingleton('core/resource')
            ->getTableName('sales/order');

        $collection
            ->getSelect()
            ->joinLeft(
                array('orders' => $orderTableName),
                'orders.customer_id=e.entity_id',
                array('order_count' => 'COUNT(customer_id)')
            );
        $collection->groupByAttribute('entity_id');

之前:$this->setCollection($collection);

_prepareColumns 我添加了:

$this->addColumn('order_count', array(
            'header'    => Mage::helper('customer')->__('# orders'),
            'index'     => 'order_count',
             'type'  => 'number'
        ));

虽然它确实在网格中工作,但我有一些问题:

  • 寻呼机显示 1 个客户(应该是 500+)

  • 在这个新列上排序不起作用

4

3 回答 3

1

只需删除:

$collection->groupByAttribute('entity_id');

并添加:

$collection->group('e.entity_id');

我们拥有的概述:

$orderTableName = Mage::getSingleton('core/resource')
        ->getTableName('sales/order');

    $collection
        ->getSelect()
        ->joinLeft(
            array('orders' => $orderTableName),
            'orders.customer_id=e.entity_id',
            array('order_count' => 'COUNT(customer_id)')
        );
   $collection->group('e.entity_id');

或者

$orderTableName = Mage::getSingleton('core/resource')
        ->getTableName('sales/order');

    $collection
        ->getSelect()
        ->joinLeft(
            array('orders' => $orderTableName),
            'orders.customer_id=e.entity_id',
            array('order_count' => 'COUNT(customer_id)')
        )
        ->group('e.entity_id');
于 2014-08-22T16:26:09.717 回答
0

GROUP BY您的集合中有一个子句,网格寻呼机用于$collection->getSize()确定页数。问题是getSize()将 a 应用于SELECT COUNT(*)集合,并获取第一行的第一列以获取结果数。在GROUP BY仍然应用的情况下,寻呼机然后认为只有一个结果。

为防止出现此问题,您应该使用您自己的 customers 集合和相关的getSize(),或者使用子查询来检索您需要的总数。

于 2013-09-23T13:34:22.177 回答
0

那里工作得很好。只需按照以下步骤。

在以下文件 app\code\core\Mage\Adminhtml\Block\Customer\Grid.php 中添加代码

 add this code in _prepareCollection() fucntion only 

$sql ='SELECT COUNT(*)'
        . ' FROM ' . Mage::getSingleton('core/resource')->getTableName('sales/order') . ' AS o'
        . ' WHERE o.customer_id = e.entity_id ';
        $expr = new Zend_Db_Expr('(' . $sql . ')'); 

        $collection->getSelect()->from(null, array('orders_count'=>$expr));

并将此代码添加到具有相同文件的 _prepareColumns() 函数中

$this->addColumn('orders_count', array(
            'header'    => Mage::helper('customer')->__('Total Orders'),
            'align'     => 'left',
            'width'     => '40px',
            'index'     => 'orders_count',
            'type'  => 'number',
            'sortable' => true,
        ));
于 2015-05-15T11:18:28.893 回答