製品リファレンスを含むカスタムテーブルがありますproduct_id
。次に、バックエンドグリッドに製品情報(SKU、名前)を表示したいのですが、これを行うためのベストプラクティスが何なのかわかりません。
SKU
次のように私の推測は次のとおりです。
$collection->join(
'catalog/product',
'product_id=`catalog/product`.entity_id',
array('product_sku' => 'sku')
)
( 私のグリッドブロッククラスのメソッドからのコード_prepareCollection()
)
しかし、製品名はどうですか?これは、catalog_product_entity_varcharにあります。私の理解では、独自のリソースモデルとコレクションがベースになってMage_Eav_Model_Entity_Collection_Abstract
いる場合は、のようなメソッドを使用できるため、簡単に入手できますjoinAttribute
。しかし、私のモデルは単純なテーブルに基づいており、そこから拡張されてMage_Core_Model_Resource_Db_Collection_Abstract
おり、joinAttribute
利用できる方法はありません。
この場合、製品名を取得する最良の方法は何ですか?
あなたの時間と助けをありがとう:-)
更新: より正確には、リソースモデルとコレクションについて話していました。次のようないくつかの属性を持つ単純なフラットテーブルと一致します。
entity_id product_id created_at user_id
私の意図は、いくつかの統計を表示するバックエンドにグリッドを配置することです。
ProductSku Count(ProductSku) MAX(created_at)
私の知る限り、これを行うための最善の方法は、グリッドブロッククラスを使用することであり、実行するメソッドは_prepareCollection()
です。
私の方法は次のようになります:
protected function _prepareCollection()
{
// Get and set our collection for the grid
$collection = Mage::getResourceModel($this->_getCollectionClass());
$collection
->join(
'catalog/product',
'product_id=`catalog/product`.entity_id',
array('product_sku' => 'sku')
)
->addExpressionFieldToSelect('product_count', 'COUNT({{product_id}})', 'product_id')
->addExpressionFieldToSelect('newest', 'MAX({{created_at}})', array('created_at'=>'main_table.created_at'))
->getSelect()->group('product_id');
$this->setCollection($collection);
return parent::_prepareCollection();
}
これはsku(_prepareColums()
メソッドではproduct_skuと呼んでいます)に適していjoin
ますが、名前(および製造元など)を取得するためにここに何を挿入する必要がありますか?
使用できないので何か悪いことをしていますjoinLeft()
か?
Mage_Core_Model_Resource_Db_Collection_Abstract
てエラーが発生しますCall to undefined method Mycompany_Module_Model_Resource_Mymodel_Collection::joinLeft()
。これはEAVリソースモデルを使用していないためだと思いますか?