>

내 맞춤 그리드에 국가 코드, 총 주문 및 주문 수량이 나와 있습니다. mysql 쿼리에서 얻을 때 total_order를 얻지 못하지만 그리드 결과는 얻지 못합니다. 아래 코드에서 Grid 및 collection을 확인하십시오. 컬렉션에서 :

protected function _addAddressFields()
{
    $shippingAliasName = 'shipping_o_a';
    $joinTable = $this->getTable('sales/order_address');
    $this->addFilterToMap('shipping_country_id', $shippingAliasName . '.country_id');
    $this
        ->getSelect()
        ->join(
            array($shippingAliasName => $joinTable),
            "(main_table.entity_id = {$shippingAliasName}.parent_id)",
            array(
                $shippingAliasName . '.country_id'
            )
        )
        ->columns(array('totals' => 'count(main_table.entity_id)'))
        ->group($shippingAliasName.'.country_id');
    Mage::getResourceHelper('core')->prepareColumnsList($this->getSelect());
    echo $this->getSelect();exit;
    return $this;
}

그리드에서 :

protected function _prepareColumns()
{
    $this->addColumn('country', array(
        'header'    =>Mage::helper('reports')->__('Country Code'),
        'index'     =>'country_id'
    ));
   $this->addColumn('total_orders', array(
        'header'    =>Mage::helper('reports')->__('Orders'),
        'index'     =>'totals'
    ));
    $this->addColumn('ordered_qty', array(
        'header'    =>Mage::helper('reports')->__('Quantity Ordered'),
        'width'     =>'120px',
        'align'     =>'right',
        'index'     =>'entity_id',
        'total'     =>'count',
        'type'      =>'number'
    ));
    //$this->addExportType('*/*/exportSoldCsv', Mage::helper('reports')->__('CSV'));
    //$this->addExportType('*/*/exportSoldExcel', Mage::helper('reports')->__('Excel XML'));
    return parent::_prepareColumns();
}

  • 답변 # 1

    이 문제를 해결하고 다음과 같은 답변을 찾았습니다.

    public function addOrderedQty($from = '', $to = '')
    {
        $adapter              = $this->getConnection();
        $orderTableAliasName = $adapter->quoteIdentifier('main_table');
        $adapter              = $this->getConnection();
        $shippingAliasName = 'shipping_o_a';
        $joinTable = $this->getTable('sales/order_address');
        $this->getSelect()->reset()
            ->from(array('main_table' => $this->getTable('sales/order')),
                array(
                    'total_orders' => 'count(main_table.entity_id)'
                ))
            ->join(
                array($shippingAliasName => $joinTable),
                /*"(main_table.entity_id = {$shippingAliasName}.parent_id"
                    . " AND {$shippingAliasName}.address_type = 'shipping')",*/
                   "(main_table.entity_id = {$shippingAliasName}.parent_id)",
                array(
                    $shippingAliasName . '.country_id'
                )
            )
            ->group($shippingAliasName.'.country_id');
        if ($from != '' && $to != '') {
            $fieldName            = $orderTableAliasName . '.created_at';
            $this->getSelect()->where($this->_prepareBetweenSql($fieldName, $from, $to));
        }
        //echo $this->getSelect();exit;
        return $this;
    }
    
    

관련 자료

  • 이전 angular - 배열 내에서 그리고 해당 데이터를 사용하는 배열
  • 다음 linked list - orientdb 그래프 데이터베이스 - 연결된 모서리를 기준으로 필드 내용 설정