2011-10-31 10:44:00
通常我们使用Mage::getModel('catalog/product')->getCollection()能够获取到产品集。
在这个产品集中,只包含了table catalog_product_entity 中的字段,但是很多时候我们都需要更多的字段,比如产品price,qty等;
一般情况下,我们会这样做:
- $collection = Mage::getModel('catalog/product')->getCollection();
- $collection->addAttributeToSelect('filedname');//通过验证,此处添加这一行不起作用
- foreach($collection->getAllIds() as $id){
- $prod= Mage::getModel('catalog/product')->load($id)->getData();//此时的prod包含了EAV模型中的所有属性
- }
实际上,上面虽然能获取产品的所有属性,但是在你的product有上万条的时候,就会严重影响性能了。或许你会说用下边的code也可以:
- $collection->addExpressionFieldToSelect('filedname', "{{filedname}}", array('filedname' => 'filedname'));
- $collection->getSelect()->joinLeft('tablename','e.entity_id=`tablename`.entity_id','');
不错,虽然可以得到你想要的属性,但是这仅仅限于系统属性,如qty,因为我们知道qty是存储于中的,但是
magento中又很多自定义属性,是采用EAV模型存储的,所以上面的方法也不可行了。
还好有 joinAttribute joinField这两个function解决了上面的问题。
比如我想将name添加到collection中
- $collection->joinAttribute('name','catalog_product/name', 'entity_id', 'entity_id','left', 0);
就可以了,将qty添加到collection中
- $collection->joinField('qty', 'cataloginventory/stock_item','qty','product_id=entity_id', '{{table}}.stock_id=1','left');
就可以了。
joinAttribute 用来添加EAV模型中的Attribute ,只要在table 中能找到的attribute_code都可以在这里使用!
更多精彩内容:各种AI课程、技能课程、黑科技软件、网站小程序源码、副业小项目、PPT模板等精品素材、电商课程、推广引流课程等,尽在 天边资源网 。