Mam niestandardową tabelę z odniesieniem do produktu product_id
. Teraz chciałbym wyświetlić informacje o produkcie (SKU, nazwa) w siatce wewnętrznej bazy danych , ale nie jestem pewien, jaka jest najlepsza praktyka, aby to zrobić?
Moje najlepsze przypuszczenie SKU
brzmi następująco:
$collection->join(
'catalog/product',
'product_id=`catalog/product`.entity_id',
array('product_sku' => 'sku')
)
(kod z _prepareCollection()
metody w mojej klasie bloków grid)
Ale co z nazwą produktu? Można go znaleźć w catalog_product_entity_varchar. Rozumiem, że możesz raczej łatwo go zdobyć, jeśli twój własny model zasobów i kolekcja jest oparta, Mage_Eav_Model_Entity_Collection_Abstract
ponieważ wtedy możesz użyć metod takich jak joinAttribute
. Ale mój model opiera się na prostej tabeli i jest rozszerzany Mage_Core_Model_Resource_Db_Collection_Abstract
i nie ma joinAttribute
dostępnej metody.
Więc jaki jest najlepszy sposób na uzyskanie nazwy produktu w tym przypadku?
Dziękuję za poświęcony czas i pomoc :-)
Aktualizacja: Mówiąc ściślej, mówiłem o moim modelu zasobów i kolekcji. Pasuje do prostego płaskiego stołu z zaledwie kilkoma atrybutami
entity_id product_id created_at user_id
Moim zamiarem jest gridowanie w backendie, gdzie pokazuję statystyki:
ProductSku Count(ProductSku) MAX(created_at)
O ile mi wiadomo, najlepszym podejściem do tego jest klasa bloków grid, a metodą jest _prepareCollection()
.
Moja metoda wygląda następująco:
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();
}
Działa to dobrze dla SKU (które w _prepareColums()
metodzie nazywam product_sku . Ale co join
muszę tu wstawić, aby uzyskać nazwę (i np. Producenta)?
Czy robię coś źle, ponieważ nie mogę użyć joinLeft()
?
Mage_Core_Model_Resource_Db_Collection_Abstract
i pojawia się błądCall to undefined method Mycompany_Module_Model_Resource_Mymodel_Collection::joinLeft()
. Chyba dlatego, że nie używam modelu zasobów EAV?