5

バンドルされたアイテムの巨大なリストを操作していますが、ユーザーから入力された基準に基づいて、特定のアイテムのみをオプションとして表示したいと考えています。これは、次の行に沿って 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>';
      }
    }
}

問題は、リストのサイズやその他のいくつかの要因により、大量のリソースを消費することです。リスト全体をふるいにかけることなく、特定のオプション ID のみを検索して表示する方法を見つけたいと思います (WHERE product_id = XXXXオプション ID を取得するクエリに a を追加できます)。ただし、個々のバンドル オプションを検索するための解決策が見つからないようです。誰でもこれを達成するのを手伝ってもらえますか?

4

1 に答える 1

-1

これには反発があるかもしれませんが、Magento で巨大なコレクションの上限に達した場合、次の 2 つのいずれかを実行できることがわかりました。

あなたはできる...

  1. より多くのRAM /プロセッサーなどを得るために、ホスティングソリューションにお金を投じます
  2. SQL の直接読み取りを使用する

完全にテストされていないコードを使用して高度に管理されたデータベースに何かを戻そうとしないため、SQL 読み取りの使用は特に危険ではありません。何かを壊す可能性はかなり低いです。はい、問題が発生する可能性は低いですが、特定のケースに最適なこのようなトリックを使用することのコスト/メリットを比較検討する必要があります。カスタムのものではなく、MagentoのSQLインターフェースをまだ使用しています。

次のコードを変更して、entity_ids または検索したいもののリストを取得し、その結果を使用してコレクションを作成します。

// 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);
}
于 2014-04-07T15:15:50.950 に答える