6

管理者で株式レポートを作成していますが、結合された列をフィルター処理できないように見えることを除いて、これまでのところすべてが機能しています。

以下を使用して在庫情報に参加し、コレクションを取得しました。

$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 を使用しています! どんな指針も素晴らしいでしょう!

4

2 に答える 2

16

結合後、結合されたフィールドを で_map宣言された配列に追加する必要がありますVarien_Data_Collection_Db。次に例を示します。

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

[編集] @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;
} 
} 
于 2013-04-08T08:55:08.527 に答える