Tengo una tabla personalizada con una referencia de producto product_id
. Ahora me gustaría mostrar información del producto (sku, nombre) en mi cuadrícula de back-end , pero no estoy seguro de cuál es la mejor práctica para hacer esto.
Mi mejor conjetura SKU
es la siguiente:
$collection->join(
'catalog/product',
'product_id=`catalog/product`.entity_id',
array('product_sku' => 'sku')
)
(código del _prepareCollection()
método en mi clase de bloque de cuadrícula)
¿Pero qué hay del nombre del producto? Se puede encontrar en catalog_product_entity_varchar. Tengo entendido que puede obtenerlo fácilmente si su propio modelo y colección de recursos se basa en Mage_Eav_Model_Entity_Collection_Abstract
porque puede usar métodos como joinAttribute
. Pero mi modelo se basa en una tabla simple y se extiende desde Mage_Core_Model_Resource_Db_Collection_Abstract
y no hay ningún joinAttribute
método disponible.
Entonces, ¿cuál es la mejor manera de obtener el nombre del producto en este caso?
Gracias por tu tiempo y ayuda :-)
Actualización: para ser más precisos, estaba hablando de mi modelo de recursos y mi colección. Coincide con una tabla plana simple con solo algunos atributos como
entity_id product_id created_at user_id
Mi intención es cuadricular en el backend donde muestro algunas estadísticas:
ProductSku Count(ProductSku) MAX(created_at)
Hasta donde sé, la mejor forma de hacerlo es a través de la clase de bloque de cuadrícula y el método a seguir es _prepareCollection()
.
Mi método se ve así:
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();
}
Esto funciona bien para el sku (al que me refiero como product_sku en el _prepareColums()
método. Pero, ¿ join
qué necesito insertar aquí para obtener el nombre (y, por ejemplo, el fabricante)?
¿Estoy haciendo algo mal porque no puedo usar joinLeft()
?
Mage_Core_Model_Resource_Db_Collection_Abstract
y recibo un errorCall to undefined method Mycompany_Module_Model_Resource_Mymodel_Collection::joinLeft()
. ¿Supongo que esto se debe a que no uso un modelo de recursos EAV?