Eu tenho uma tabela personalizada com uma referência de produto product_id
. Agora, gostaria de mostrar informações do produto (sku, nome) na minha grade de back-end , mas não tenho certeza qual é a melhor prática para fazer isso?
Meu melhor palpite SKU
é o seguinte:
$collection->join(
'catalog/product',
'product_id=`catalog/product`.entity_id',
array('product_sku' => 'sku')
)
(código do _prepareCollection()
método na minha classe de bloco de grade)
Mas e o nome do produto? Pode ser encontrado em catalog_product_entity_varchar. Meu entendimento é que você pode obtê-lo com bastante facilidade se o seu próprio modelo e coleção de recursos for baseado, Mage_Eav_Model_Entity_Collection_Abstract
porque então você poderá usar métodos como joinAttribute
. Mas meu modelo é baseado em uma tabela simples e se estende a partir de Mage_Core_Model_Resource_Db_Collection_Abstract
e não há joinAttribute
método disponível.
Então, qual é a melhor maneira de obter o nome do produto nesse caso?
Obrigado pelo seu tempo e ajuda :-)
Atualização: para ser mais preciso, eu estava falando sobre meu modelo e coleção de recursos. Combina uma tabela plana simples com apenas alguns atributos, como
entity_id product_id created_at user_id
Minha intenção é fazer uma grade no back-end, onde mostro algumas estatísticas:
ProductSku Count(ProductSku) MAX(created_at)
Até onde eu sei, a melhor maneira de fazer isso é através da classe de blocos de grade e o método a seguir é _prepareCollection()
.
Meu método fica assim:
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();
}
Isso funciona bem para o sku (que eu me refiro como product_sku no _prepareColums()
método. Mas o join
que preciso inserir aqui para obter o nome (e, por exemplo, o fabricante)?
Estou fazendo algo errado porque não posso usar joinLeft()
?
Mage_Core_Model_Resource_Db_Collection_Abstract
e recebo um erroCall to undefined method Mycompany_Module_Model_Resource_Mymodel_Collection::joinLeft()
. Eu acho que isso é porque eu não uso um modelo de recursos EAV?