J'ai un tableau personnalisé avec une référence de produit product_id
. Maintenant, je voudrais afficher les informations sur les produits (sku, nom) dans ma grille principale , mais je ne sais pas quelle est la meilleure pratique pour le faire?
Ma meilleure estimation SKU
est la suivante:
$collection->join(
'catalog/product',
'product_id=`catalog/product`.entity_id',
array('product_sku' => 'sku')
)
(code de la _prepareCollection()
méthode dans ma classe de bloc de grille)
Mais qu'en est-il du nom du produit? Il peut être trouvé dans catalog_product_entity_varchar. Ma compréhension est que vous pouvez plutôt facilement l'obtenir si votre propre modèle de ressources et collection est basé sur, Mage_Eav_Model_Entity_Collection_Abstract
car alors vous pouvez utiliser des méthodes comme joinAttribute
. Mais mon modèle est basé sur une table simple et s'étend de Mage_Core_Model_Resource_Db_Collection_Abstract
et il n'y a pas de joinAttribute
méthode disponible.
Alors, quelle est la meilleure façon d'obtenir le nom du produit dans ce cas?
Merci pour votre temps et votre aide :-)
Mise à jour: Pour être plus précis, je parlais de mon modèle de ressources et de ma collection. Il correspond à une simple table plate avec seulement quelques attributs comme
entity_id product_id created_at user_id
Mon intention est de grille dans le backend où je montre quelques statistiques:
ProductSku Count(ProductSku) MAX(created_at)
Pour autant que je sache, la meilleure approche pour ce faire, est via la classe de bloc de grille et la méthode à suivre est _prepareCollection()
.
Ma méthode ressemble à ceci:
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();
}
Cela fonctionne bien pour le sku (que j'appelle product_sku dans la _prepareColums()
méthode. Mais que join
dois-je insérer ici pour obtenir le nom (et par exemple le fabricant)?
Suis-je en train de faire quelque chose de mal parce que je ne peux pas l'utiliser joinLeft()
?
Mage_Core_Model_Resource_Db_Collection_Abstract
et j'obtiens une erreurCall to undefined method Mycompany_Module_Model_Resource_Mymodel_Collection::joinLeft()
. Je suppose que c'est parce que je n'utilise pas de modèle de ressource EAV?