0

商品が関連付けられているすべてのカテゴリを読み込もうとしていますが、最も深い子カテゴリのみを選択する必要があります。たとえば、製品はカテゴリに関連付けられており、women > trousers > jeans表示さjeansれる必要があります。

これまでに思いついたコードは正しいクエリを返しますが、コレクションにアクセスすると SQL エラーがスローされます。SQLSTATE[42S22]: Column not found: 1054 Unknown column 'cat_path' in 'on clause'

/* @var $_categoryNames Mage_Catalog_Model_Resource_Category_Collection */
$_categoryNames = $_product->getCategoryCollection();   

$_categoryNames
    ->joinTable(
        'catalog/category',
        "entity_id = entity_id",
        array('cat_path' => 'path')
    )
    ->getSelect()
    ->where(
        "cat_path not like( CONCAT( path, '/%' ) )"
    );

die($_categoryNames->getSelect());

更新: blmage のおかげで、少なくとも適切なカテゴリを取得するための SQL ステートメントを見つけることができました。

SELECT * 
FROM `catalog_category_entity`e 
WHERE (SELECT COUNT(`entity_id`)
FROM `catalog_category_entity`c
WHERE c.path LIKE (CONCAT(e.path,'%'))
)=1
4

2 に答える 2

1

私のソリューションでは、現在、結合の代わりにサブセレクトを使用しています。改善すべき点が残っているかもしれませんが、それは私にとってはうまくいきます。

 $_categoryIds = $_product->getCategoryIds();


/** @var $read Varien_Db_Adapter_Interface */
$read = Mage::getSingleton('core/resource')
    ->getConnection('core_read');

$_categoryIdSelect=$read->select()
    ->from(
        array(
            'c' => $_categories->getTable('catalog/category')
        ),
        'COUNT(e.entity_id)'
    )
    ->where('entity_id IN (?)', $_categoryIds)
    ->where(
        "c.path LIKE (CONCAT(e.path,'%'))"
    );

 /* @var $_categoryNames Mage_Catalog_Model_Resource_Category_Collection */
$_categoryNames = $_product->getCategoryCollection();       
$_categoryNames->getSelect()
            ->where(
                '2 > (?)',
                new Zend_Db_Expr($_categoryIdSelect)
            );
于 2013-07-03T08:01:56.043 に答える
0

これを試して

$path = "/abc/example";

$_categoryNames->addFieldToFilter('cat_path', array('nlike' => $path));
于 2013-06-28T14:59:55.037 に答える