过滤已连接的列

时间:2012-04-23 16:33:48

标签: magento

我正在管理员中创建一个股票报告,并且到目前为止一切正常,除了我似乎无法在已加入的列上进行过滤。

我已加入股票信息,使用以下内容获取我的收藏。

$collection = Mage::getModel('catalog/product')->getCollection()
                ->addAttributeToSelect('name')
                ->addAttributeToSelect('sku')
                ->addAttributeToSelect('price')
                ->setStoreId($storeId);
$collection->addFieldToFilter('type_id', 'simple');

// Add on the stock qty information
$collection->getSelect()->join( array('stock'=>'ccmg_cataloginventory_stock_item'), 'e.entity_id = stock.item_id', array('stock.qty'));

这导致它显示,但您无法对列进行过滤或排序。我假设因为选项没有被传递回连接。但是,可以对其他列进行排序和过滤,并拉回和显示匹配数据。

我一直在搜索,但大多数帖子都是在2008年的Magento论坛上,而我正在使用1.6!任何指针都会很棒!

2 个答案:

答案 0 :(得分:14)

加入后,您需要将加入的字段添加到_map中声明的数组Varien_Data_Collection_Db,例如:

$this->_map['fields']['stock_qty'] = 'stock.qty';

[edit] 正如@ sh4dydud3_88指出的那样,你可以这样做:

$collection->addFilterToMap('stock_qty', 'stock.qty');

将添加字段 stock_qty 进行过滤。然后你可以用

过滤
$collection->addFieldToFilter('stock_qty', array('gt', 10));

另一个例子:

class Company_Mohe_Model_Resource_Im_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
{
protected function _construct()
{
    $this->_init('mohe/im');
}  


public function joinIhe()
{
    $this->getSelect()->join(array('ihe' => $this->getTable('mohe/ihe')),
                                  'main_table.mic_inst_id = ihe.im_id',
                                  array('ihe_name'=>'name', 'ihe_ifms_id'=>'ifms_id')); 
    //$this->_map['fields'] = array('ihe_name'=>'ihe.name', 'ihe_ifms_id'=>'ihe.ifms_id'); //incorrect method
    $this->addFilterToMap('ihe_name', 'ihe.name'); //correct method, see comment by @sh4dydud3_88                           
    return $this;
} 
} 

答案 1 :(得分:0)

加入后,只需使用命令对结果进行排序

$collection->getSelect()
    ->join( array('stock'=>'ccmg_cataloginventory_stock_item'), 'e.entity_id = stock.item_id', array('stock.qty'))
    ->order('stock.qty ASC');