Ho una tabella personalizzata con un riferimento al prodotto product_id
. Ora vorrei mostrare le informazioni sul prodotto (sku, nome) nella mia griglia di back-end , ma non sono sicuro di quale sia la migliore pratica per farlo?
La mia ipotesi migliore SKU
è la seguente:
$collection->join(
'catalog/product',
'product_id=`catalog/product`.entity_id',
array('product_sku' => 'sku')
)
(codice dal _prepareCollection()
metodo nella mia classe di blocco della griglia)
Ma per quanto riguarda il nome del prodotto? Può essere trovato in catalog_product_entity_varchar. La mia comprensione è che puoi piuttosto facilmente ottenerlo se il tuo modello di risorsa e la tua raccolta sono basati su Mage_Eav_Model_Entity_Collection_Abstract
perché allora puoi usare metodi come joinAttribute
. Ma il mio modello si basa su una tabella semplice e si estende da Mage_Core_Model_Resource_Db_Collection_Abstract
e non esiste alcun joinAttribute
metodo disponibile.
Quindi qual è il modo migliore per ottenere il nome del prodotto in questo caso?
Grazie per il tuo tempo e aiuto :-)
Aggiornamento: per essere più precisi, stavo parlando del mio modello di risorsa e raccolta. Abbina una semplice tabella piatta con solo alcuni attributi come
entity_id product_id created_at user_id
La mia intenzione è quella di grigliare nel backend in cui mostro alcune statistiche:
ProductSku Count(ProductSku) MAX(created_at)
Per quanto ne so, il miglior approccio per farlo è tramite la classe del blocco della griglia e il metodo da seguire è _prepareCollection()
.
Il mio metodo è simile al seguente:
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();
}
Questo funziona bene per lo sku (che nel _prepareColums()
metodo definisco product_sku . Ma cosa join
devo inserire qui per ottenere il nome (e ad esempio il produttore)?
Sto sbagliando qualcosa perché non posso usarlo joinLeft()
?
Mage_Core_Model_Resource_Db_Collection_Abstract
e ottengo un erroreCall to undefined method Mycompany_Module_Model_Resource_Mymodel_Collection::joinLeft()
. Immagino che sia perché non uso un modello di risorse EAV?