2012-01-27 94 views
3

在Magento中,如何将标准产品收集加入自定义属性的自定义表中。Magento将产品收集加入自定义属性的自定义表

因此,例如,我有一个自定义产品属性warehouse_id和一个自定义表仓库,现在想要一个具有产品名称,仓库名称的集合。

代码示例:

$collection = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->joinAttribute('warehouse_id', 'warehouse/warehouse', 'warehouse_id', null, 'inner'); 
var_dump($collection); 

然而,这不起作用,因为仓库是一个自定义表/集,而不是在 eav_entity_type表。

谈到这个问题各地认为这可能工作:

$collection = Mage::getModel('warehouse/warehouse')->getCollection()->joinAttribute(etc. 

然而,joinAttribute是不是我的自定义集合的方法。

看过每个例子,每个帖子,wiki例子等,不能掌握如何做到这一点。一个特定的代码示例将是完美的。

回答

1

我认为joinAttribute可能可以工作,如果一些参数被改变。我更熟悉join and joinLeft,它更像是直接使用mysql查询。

$collection = Mage::getModel('catalog/product') 
    ->getCollection()->getSelect() 
    ->joinLeft(array('warehouse_id'=>'warehouse'),'e.warehouse_id = warehouse_id.warehouse_id', array('name')); 
var_dump($collection); 

这是假设您的自定义表的名称是warehouse以及对应于定制warehouse_id在自定义表中的字段属性也被称为warehouse_id。这也假定您的自定义表中仓库名称的字段为name。你可能需要做的,而不是直接命名表是这样的:

$collection = Mage::getModel('catalog/product') 
    ->getCollection()->getSelect() 
    ->joinLeft(array('warehouse_id'=>$this->getTable('warehouse/warehouse')),'e.warehouse_id = warehouse_id.warehouse_id', array('name')); 
var_dump($collection); 

如果没有工作,与线替换的var_dump行:

echo $this->escapeHtml($collection->getSelect()); 

并张贴在这里生成的SQL查询。