2012-01-27 17 views
3

Magentoでは、標準製品コレクションをカスタム属性のカスタムテーブルにどのように結合できますか。Magentoカスタム属性のカスタムテーブルへの製品コレクションの結合

たとえば、私はカスタム商品属性warehouse_idとカスタムテーブルウェアハウスを持ち、今では商品名、倉庫名のコレクションが必要です。

コード例:倉庫は、カスタムテーブル/コレクションで、 eav_entity_typeテーブルにないため

$collection = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->joinAttribute('warehouse_id', 'warehouse/warehouse', 'warehouse_id', null, 'inner'); 
var_dump($collection); 

しかし、これは動作しません。問題を回す

が周りこれはうまくいくかもしれないと思った:

$collection = Mage::getModel('warehouse/warehouse')->getCollection()->joinAttribute(etc. 

しかし、joinAttributeは私のカスタムコレクションの方法ではありません。

すべての例、すべての投稿、wikiの例などを読み、これを行う方法を理解できません。具体的なコード例は完璧です。

答えて

1

いくつかのパラメータが変更された場合、joinAttributeが機能する可能性があります。私はちょっと詳しくはjoin and joinLeftですが、これはmysqlクエリを直接扱うようなものです。

$collection = Mage::getModel('catalog/product') 
    ->getCollection()->getSelect() 
    ->joinLeft(array('warehouse_id'=>'warehouse'),'e.warehouse_id = warehouse_id.warehouse_id', array('name')); 
var_dump($collection); 

これは、カスタムテーブルの名前がwarehouseであることを前提とカスタムに対応warehouse_idカスタムテーブル内のフィールドは、属性もwarehouse_idと呼ばれていること。これはまた、カスタムテーブル内の倉庫名のフィールドがnameであることを前提としています。代わりに、直接テーブルに名前を付けるのこのような何かをする必要がある場合があります:

$collection = Mage::getModel('catalog/product') 
    ->getCollection()->getSelect() 
    ->joinLeft(array('warehouse_id'=>$this->getTable('warehouse/warehouse')),'e.warehouse_id = warehouse_id.warehouse_id', array('name')); 
var_dump($collection); 

をどちらの作品は、ラインでのvar_dumpラインを交換する場合:

echo $this->escapeHtml($collection->getSelect()); 

をそしてここで結果のSQLクエリを投稿してください。

関連する問題