2013-02-11 70 views
0

我將使用一個產品集合,但是當我使用id加載一個產品時20 Magento返回一個SQL查詢。爲什麼magento在加載集合中返回查詢

代碼:

$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

既然你調用一個集合的參數被忽略的負載。如果集合上的加載函數尚未結束執行,則它將執行該查詢。

你既可以使用模式:

$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()); 

或辨識得到集合項目:

$product = $products->getItemById(20); 
$product->load($product->getId()); 

請注意,在所有情況下在產品上調用load而不在collection上調用。

另請注意,如果可能(性能受到影響),應避免在產品上裝入函數調用,並在調用addAttributeToSelect時將所需屬性添加到集合中。

相關問題