2012-04-23 8 views
5

私は管理者に在庫レポートを作成していますが、結合された列をフィルタリングできないように見えることを除いて、これまでのところすべての作業を行っています。結合された列をフィルタリングする

私は以下の情報を参考にして、私のコレクションを取り込みました。

$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を使用しています。すべてのポインタが素晴らしいだろう!参加した後

答えて

11

は、あなたが例えば、Varien_Data_Collection_Dbで宣言された配列_mapに接合されたフィールドを追加する必要があります。

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

[編集]の@ sh4dydud3_88で指摘したように、あなたはこれを行うことができます。フィルタリングのためのフィールドstock_qtyを追加します

$collection->addFilterToMap('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; 
} 
} 
+0

あなたの結果をソートするために使用し参加するともうこのプロジェクトに取り組んでいます。 –

+2

それは動作しますが、Mage_Core_Model_Resource_Db_Collection_Abstractを拡張していないので、 '_map ['fields']'はプライベート/保護されていました。 addFilterToMapがトリックを行いました。 '$ collection-> addFilterToMap( 'ihe_name'、 'ihe.name');' –

+0

'' 'addFieldToMap'''は実際には正しい方法です。 '' '$ this - > _ map ['fields']' ''は実際には '' '_map'''の配列を上書きするので、マップする列が複数あると面倒です。 – kiatng

0

単に私はないんだけど、これが動作するか私は確認できない

$collection->getSelect() 
    ->join(array('stock'=>'ccmg_cataloginventory_stock_item'), 'e.entity_id = stock.item_id', array('stock.qty')) 
    ->order('stock.qty ASC'); 
関連する問題