製品IDで製品コレクションを取得する


回答:


14

インスタンス化されているが読み込まれていないコレクション $collectionと製品IDの配列を指定$productIdsするaddIdFilter()と、Magento 1と同じように使用できます。

$collection->addIdFilter($productIds);

コレクションをインスタンス化するには、を注入し\Magento\Catalog\Model\ResourceModel\Product\CollectionFactoryてから使用できます

$collection = $this->collectionFactory->create();

しかし、これはもう推奨されない練習です!


Magento 2では、コアモジュールを使用するときに、コレクションについてあまり考えないでください。これらは単なる実装の詳細です。代わりにサービスコントラクトを使用します。

  • 注入Magento\Catalog\Api\ProductRepositoryInterfaceして\Magento\Framework\Api\SearchCriteriaBuilder
  • use Magento\Framework\Api\Filter;
  • 検索条件を作成し、それをに渡します$productRepository->getList()

    $searchCriteria = $this->searchCriteriaBuilder->addFilter(new Filter([
        Filter::KEY_FIELD => 'entity_id',
        Filter::KEY_CONDITION_TYPE => 'in',
        Filter::KEY_VALUE => $productIds
    ]))->create();
    $products = $this->productRepository->getList($searchCriteria)->getItems();

    $products 次に、製品の配列です。


1
多分私は何かが足りないかもしれませんが、リポジトリを使用しても結果を完全に制御することはできないようです。たとえば、EAVエンティティに属性をどのように追加しますか?または外部テーブルに参加しますか?その場合でも、Magento2コアがコレクションを使用していることがわかります。有効な代替手段はありますか?ありがとうございました!
アレッサンドロロンキ2016年

1
残念ながらありません。まだコレクションが必要な場合がよくあります。参照:magento.stackexchange.com/a/158098/243
ファビアンシュメングラー2017

まさに私の問題です。リポジトリで結果を取得するための機能するメソッドを作成しましたが、結果を変更することができませんでした(またはコレクションにきちんと入れることもできず、追加/設定データメソッドが不足しているなどの問題もありました)。
LM_Fielding 2017

9

SearchCriteriaとProduct Repositoriesを使用します。

$productIds = [.....];
$searchCriteria = $this->searchCriteriaBuilder
                ->addFilter('entity_id', $productIds, 'in')
                ->create();

$products = $this->productRepositoryInterface->getList($searchCriteria)->getItems();

検索条件ビルダーと製品リポジトリオブジェクトを取得するには、以下が必要です。

  • Magento \ Framework \ Api \ SearchCriteriaBuilder
  • Magento \ Catalog \ Api \ ProductRepositoryInterface

エンティティIDから製品コレクションを取得したいのですが、完全なコードまたはアイデアを教えてください!
Sushivam 16

0
$porductIds=array(2,6,7);
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
    $collectionByIds = $productCollection->addAttributeToSelect('*');
    $collectionByIds->addFieldToFilter('entity_id', array('in' => $data));
    $collectionByIds->load();

    foreach ($collectionByIds as $collection) :
        echo "<pre>";
        print_r($collection->getName());
    endforeach;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.