Получить идентификаторы и названия категорий товаров - PullRequest
2 голосов
/ 11 августа 2011

Есть этот метод getCategoryIds() в Mage_Catalog_Model_Resource_Eav_Mysql4_Product. Этот метод возвращает все идентификаторы категории запрашиваемого продукта. Мне нужно изменить оператор SELECT, чтобы он также возвращал имена категорий.

Вот основной запрос:


$select = $this->_getReadAdapter()->select()
    ->from($this->_productCategoryTable, 'category_id')
    ->where('product_id=?', $product->getId());

Я не могу использовать таблицу catalog_category_flat по некоторым причинам, поэтому я должен использовать таблицы EAV. Итак, на данный момент у меня есть этот запрос:


$select = $this->_getReadAdapter()->select()
    ->from($this->_productCategoryTable, 'category_id')
    ->where('catalog_category_product.product_id=?', $product->getId())
    ->join(
       array('a' =>'catalog_category_entity_varchar'),
       'a.entity_id = catalog_category_product.category_id',
       array('name' => 'value')
    )
    ->join(
       array('b' => $this->getTable('eav/attribute')),
       'b.attribute_id = a.attribute_id',
       array()
    )
    ->where("b.attribut_code = 'name'");

Это работает, но я хотел бы спросить, есть ли лучший способ сделать это.

Ответы [ 2 ]

9 голосов
/ 11 августа 2011

Самый простой и, вероятно, самый чистый:

$categories = $product->getCategoryCollection()
    ->addAttributeToSelect('name');

Тогда вы можете просто пройти по коллекции:

foreach($categories as $category) {
    var_dump($category->getName());
}
0 голосов
/ 18 июля 2013

Я нашел этот пост: Присоединение к таблице EAV и сделал функцию, которая добавит запрос на присоединение к категории, использую его из коллекции.

Просто вызовите эту функцию из кода следующим образом:

// To join the name of category
$this->joinCategoryAttribute('<your table alias>.category_id', 'name');

А это функция:

public function joinCategoryAttribute($joinOriginId, $code)
{
    $attributeId = Mage::getResourceModel('eav/entity_attribute')->getIdByCode('catalog_category', $code);
    $entityType = Mage::getModel('eav/entity_type')->loadByCode('catalog_category');
    $attribute = Mage::getModel($entityType->getAttributeModel())->load($attributeId);
    $entityTable = $this->getTable($entityType->getEntityTable());
    $alias = 'table' . $code;
    $table = $entityTable . '_' . $attribute->getBackendType();
    $field = $alias . '.value';
    $this->getSelect()
        ->joinLeft(array($alias => $table),
                "{$joinOriginId} = {$alias}.entity_id AND {$alias}.attribute_id = " . $attribute->getAttributeId(),
                array($attribute->getAttributeCode() => $field)
        );
    return $this;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...