2012-01-31 102 views
4

我有幾千個動態ID ..可以說產品。 現在我想加載這些產品,而不用發送超過一千個查詢到數據庫。 因此,這不是一個解決方案:從數據庫中加載多個對象完成

$products = array(); 
foreach($ids as $id){ 
$products[] = Mage::getModel('catalog/product')->load($id); 
} 

但是因爲我需要的完整產品,這也是沒有辦法了:

$products = Mage::getModel('catalog/product')->getCollection(); 
$products->addFieldToFilter('entity_id', array('in', $ids)); 

所以..我真的load每個單品,這可能會導致超過3000條查詢並花費幾分鐘?

+0

你真的需要有幾千的在同一個頁面加載的產品呢? – dynamic 2012-01-31 12:16:59

+1

如果你需要它,不要!如果你被要求這麼做,那麼你說不會。在1頁加載幾個1000將導致舊計算機/瀏覽器上的內存問題 – 2012-01-31 12:21:17

+0

因此,您的問題通常是如何從數據庫存儲中獲取一個查詢的多個模型? – hakre 2012-01-31 12:24:32

回答

2

你應該這樣做:

$products = Mage::getModel('catalog/product')->getCollection(); 
foreach (<product attributes> as <attribute code>) { 
    $products->addAttributeToSelect(<attribute code>); 
} 

,之後做

$products->addFieldToFilter('entity_id', array('in', $ids)); 
+0

之後,我會和第二個例子一樣:收集不完整的產品數據,或者我誤解了您的答案?另外:我不想爲''搜索指定的id。但正如我所說,可能我只是誤解你的答案... – Matmarbon 2012-01-31 12:50:29

+1

用'addAttributeToSelect'你可以選擇哪個模型eav屬性應該被集合加載。現在更清楚了嗎? – Zyava 2012-01-31 12:52:57

+0

是的,對不起,我真的很誤會。現在一切都很清楚。但它仍然不是一個很好的解決方案..而奇怪的..但可以爲我工作,感謝這個想法。 (=> +1,但未標記爲正確) – Matmarbon 2012-01-31 13:27:13

相關問題