获取捆绑产品的个别选项ID

jpg*_*5f2 5 bundle product magento option

我正在使用捆绑商品的GIANT列表,但仅想根据用户输入的条件将某些商品显示为选项。只需按照以下方式设置一个if语句,这很容易做到:

$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>';
      }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题在于,由于列表的大小和其他一些因素,这只会占用大量资源。我想找到一种方法,仅查找和显示特定的选项ID,而不必在整个列表中进行筛选(可能在WHERE product_id = XXXX获取选项ID的查询中添加一个)。不过,我似乎找不到用于搜索单个捆绑软件选项的解决方案。谁能帮我实现这一目标?

Car*_*omp -1

我可能会对此感到强烈反对,但我发现当您达到 Magento 中庞大集合的上限时,您可以执行以下两件事之一。

你可以...

  1. 向您的托管解决方案投入更多资金,以获得更多内存/处理器/等
  2. 使用直接sql读取

使用 sql 读取并不是特别危险,因为您不会尝试使用未经彻底测试的代码将某些内容放回到高度管理的数据库中。你破坏任何东西的机会很小。是的,事情可能会出错但您需要权衡使用这样的技巧的成本/收益,这对于您的具体情况非常有用。它仍然使用 Magento 的 sql 接口,而不是自定义的。

修改以下代码以提取实体_id 列表或您想要查找的任何内容,并使用该结果创建集合。

// 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);
}
Run Code Online (Sandbox Code Playgroud)