2012-12-11 66 views
4

我正在使用捆綁項目的巨大列表,但只想根據用戶輸入的條件顯示某些選項作爲選項。這是很容易通過簡單的線沿線設立一個if語句:獲取捆綁產品的個人選項ID

$returnedproducts = array(21,50,78,23); // THESE ARE PRODUCT IDS. 
if ($_product->getTypeId() == 'bundle'){ 
    $selectionCollection = $_product->getTypeInstance(true)->getSelectionsCollection(
      $_product->getTypeInstance(true)->getOptionsIds($_product), $_product 
     ); 
    foreach($selectionCollection as $option) { 
     if(array_search($option['product_id'], $returnedproducts) !== FALSE){ // ADDED THIS TO FILTER 
        echo '<li>' . $option->option_id . '</li>'; 
     } 
    } 
} 

的問題是,這只是吸收了噸的資源由於列表的大小和其他一些因素。我想找到一種方法來查找並僅顯示特定的選項ID,而無需篩選整個列表(可能會將WHERE product_id = XXXX添加到獲取選項ID的查詢中)。儘管如此,我似乎無法找到用於搜索單個捆綁軟件選項的解決方案。任何人都可以幫我實現這個目標

+1

請不要將信息放在您可以在標籤中提供的主題行中;這裏的標籤系統工作得很好,而且不需要協助。 :-) 謝謝。 –

+1

請注意,我試圖使用'$ selectionCollection-> addFieldToFilter('entity_id',array('in'=> $ returnedproducts));'進一步過濾集合,但它似乎沒有工作。如果我從它得到的MySQL語句它工作正常,但只要集合加載它以某種方式刪除'addFieldToFilter()'... – 1000Nettles

+0

您嘗試'addAttributeToFilter()',而不是'addFieldToFilter()'? –

回答

-1

我可能會趕上一些後退了這一點,但我發現,當你達到了在Magento巨大收藏的上限,你可以做兩件事情之一..

你可以.. 。

  1. 在更多的RAM /處理器/你的託管解決方案等投錢
  2. 使用SQL直接讀取

使用SQL讀取沒有特別危險的小號因此你不會試圖用未經過徹底測試的代碼將某些東西放回高度管理的數據庫中。你的機會幾乎可以打破任何東西。是的,有可能可能出問題了,但你需要衡量使用這種技巧的成本/好處,這對你的特定情況非常有用。它仍然使用Magento的sql界面,而不是自定義界面。

修改下面的代碼來拉取entity_id列表或任何你想查找的東西,並使用THAT結果創建一個集合。

// Just in case ---$mysqli = Mage::getSingleton('core/resource')->getConnection('core_write'); 
$mysqlr = Mage::getSingleton('core/resource')->getConnection('core_read'); 

$sql = "select * from some_entity_table where some_column = 'somevars'"; 

$results = $mysqlr->fetchAll($sql); 

echo "<PRE>"; 
foreach ($results as $res) 
{ 
    var_dump($res); 
}