我将使用产品集合,但是当我加载ID为20的产品时,Magento会返回一个SQL查询。
代码:
$products = Mage::getModel('catalog/product')->getCollection();
$products
->addAttributeToFilter('status',array('eq' => 1))
->addAttributeToSelect('name')
->addAttributeToSelect('sku')
->addAttributeToSelect('price')
->setPageSize(6);
echo $products->load(20)->getname();
SQL查询:
SELECT `e`.*, IF(at_status.value_id > 0, at_status.value, at_status_default.value) AS `status` FROM `catalog_product_entity` AS `e` INNER JOIN `catalog_product_entity_int` AS `at_status_default` ON (`at_status_default`.`entity_id` = `e`.`entity_id`) AND (`at_status_default`.`attribute_id` = '96') AND `at_status_default`.`store_id` = 0 LEFT JOIN `catalog_product_entity_int` AS `at_status` ON (`at_status`.`entity_id` = `e`.`entity_id`) AND (`at_status`.`attribute_id` = '96') AND (`at_status`.`store_id` = 1) WHERE (IF(at_status.value_id > 0, at_status.value, at_status_default.value) = 1) LIMIT 6
答案 0 :(得分:0)
由于您在集合上调用load,因此会忽略该参数。集合上的加载函数只有在尚未执行时才执行查询。
您可以使用型号:
$product = Mage::getModel( 'catalog/product' )->load( 20 );
迭代收集:
foreach( $products as $product ) {
$product->load( $product->getId() ); // it would be better to add attributes to collection if possible instead of loading the product here
}
从收藏中获取第一项:
$product = products->getFirstItem();
$product->load( $product->getId() );
或者通过Id从集合中获取项目:
$product = $products->getItemById( 20 );
$product->load( $product->getId() );
请注意,在所有情况下,都会在产品上调用load,而不是在集合上调用。
另请注意,您应该尽可能避免在产品上加载函数调用(性能命中),并通过调用addAttributeToSelect
将所需属性添加到集合中。