문제

사용자 정의 벤더 모듈을 만들었습니다.제품 컬렉션과 함께 공급 업체 이름을 어떻게 얻을 수 있습니까?

광산에는 가치가 공급 업체 모듈에서 제공되는 공급 업체 속성이 있습니다.

나는 시도 를 시도했다

$collection = Mage::getModel('catalog/product')->getCollection()
$collection->getSelect()->join( array('tvendor'=>$this->getTable('vendor/vendor')), 'main_table.vendor = tvendor.vendor_option_id', array('tvendor.filename'));
.

그러나 작동하지 않습니다.어디에서 틀렸어?

도움이 되었습니까?

해결책

다음 작업.

Magento가 옵션이있는 속성을 기반으로 제품 컬렉션을 분류하는 방식에 따라이 작업을 수행했습니다.Mage_Eav_Model_Entity_Attribute_Source_Table::addValueSortToCollectionMage_Eav_Model_Resource_Entity_Attribute_Option::addOptionValueToCollection 에 대한 자세한 내용을 참조하십시오.

//===>configure the fields below based on your needs
$attributeCode = 'vendor_id'; //replace this with the attribute code that holds the vendor
//get the attribute object
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $attributeCode);
//attribute id
$attributeId = $attribute->getId();
$tablePkName = 'vendor_id'; //primary key name of the vendor table
$nameField = 'name'; //vendor table name field - the one you need
//get table that holds the vendors
$table = Mage::getSingleton('core/resource')->getTableName('vendor/vendor');
//<=== end of configuration
$collection = Mage::getModel('catalog/product')->getCollection();
//add the vendor attribtue to select
$collection->addAttributeToSelect($attributeCode);
$valueTable1    = $attributeCode . '_t1';
$valueTable2    = $attributeCode . '_t2';
//perform 2 left joins in case the attribute has the scope website or store view. 
//It works even if the attribute has the scope global. this covers all the cases
$collection->getSelect()
    ->joinLeft(
        array($valueTable1 => $attribute->getBackend()->getTable()),
        "e.entity_id={$valueTable1}.entity_id"
            . " AND {$valueTable1}.attribute_id='{$attributeId}'"
            . " AND {$valueTable1}.store_id=0",
        array())
    ->joinLeft(
        array($valueTable2 => $attribute->getBackend()->getTable()),
        "e.entity_id={$valueTable2}.entity_id"
            . " AND {$valueTable2}.attribute_id='{$attributeId}'"
            . " AND {$valueTable2}.store_id='{$collection->getStoreId()}'",
        array()
    );
$valueExpr = $collection->getSelect()->getAdapter()
    ->getCheckSql("{$valueTable2}.value_id > 0", "{$valueTable2}.value", "{$valueTable1}.value");
$optionTable   = $attributeCode . '_option_value_t1';
$tableJoinCond = "{$optionTable}.{$tablePkName}={$valueExpr}";
//join with the vendor table
$collection->getSelect()
    ->joinLeft(
        array($optionTable => $table),
        $tableJoinCond,
        array($nameField));
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top