Ich habe eine benutzerdefinierte Tabelle mit einer Produktreferenz product_id
. Jetzt möchte ich Produktinformationen (SKU, Name) in meinem Backend-Raster anzeigen , bin mir aber nicht sicher, wie dies am besten funktioniert.
Meine beste Vermutung für SKU
ist wie folgt:
$collection->join(
'catalog/product',
'product_id=`catalog/product`.entity_id',
array('product_sku' => 'sku')
)
(Code aus der _prepareCollection()
Methode in meiner Gitterblockklasse)
Aber was ist mit dem Produktnamen? Es kann in catalog_product_entity_varchar gefunden werden. Mein Verständnis ist, dass Sie es ziemlich einfach bekommen können, wenn Ihr eigenes Ressourcenmodell und Ihre eigene Sammlung darauf basieren, Mage_Eav_Model_Entity_Collection_Abstract
weil Sie dann Methoden wie verwenden können joinAttribute
. Aber mein Modell basiert auf einer einfachen Tabelle und erstreckt sich von Mage_Core_Model_Resource_Db_Collection_Abstract
und es gibt keine joinAttribute
Methode zur Verfügung.
Was ist in diesem Fall der beste Weg, um den Produktnamen zu erhalten?
Danke für deine Zeit und Hilfe :-)
Update: Genauer gesagt habe ich über mein Ressourcenmodell und meine Sammlung gesprochen. Es passt zu einem einfachen flachen Tisch mit nur wenigen Attributen wie
entity_id product_id created_at user_id
Meine Absicht ist es, im Backend zu rasteren, wo ich einige Statistiken zeige:
ProductSku Count(ProductSku) MAX(created_at)
Soweit ich weiß, ist der beste Ansatz, dies zu tun, die Rasterblockklasse, und die Methode ist zu gehen _prepareCollection()
.
Meine Methode sieht so aus:
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();
}
Dies funktioniert gut für die SKU (die ich in der _prepareColums()
Methode als product_sku bezeichne. Aber was join
muss ich hier einfügen, um den Namen (und z. B. den Hersteller) zu erhalten?
Mache ich etwas falsch, weil ich es nicht benutzen kann joinLeft()
?
Mage_Core_Model_Resource_Db_Collection_Abstract
und ich erhalte eine FehlermeldungCall to undefined method Mycompany_Module_Model_Resource_Mymodel_Collection::joinLeft()
. Ich denke, das liegt daran, dass ich kein EAV-Ressourcenmodell verwende.