Antworten:
Bei einer instanziierten, aber nicht geladenen Sammlung $collection
und einer Reihe von Produkt-IDs $productIds
können Sie addIdFilter()
genau wie in Magento 1 Folgendes verwenden:
$collection->addIdFilter($productIds);
Um eine Sammlung zu instanziieren, können Sie eine injizieren \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
und dann verwenden
$collection = $this->collectionFactory->create();
Dies wird jedoch nicht mehr empfohlen!
In Magento 2 sollten Sie bei der Verwendung von Kernmodulen nicht mehr zu viel über Sammlungen nachdenken. Sie sind lediglich ein Implementierungsdetail. Verwenden Sie stattdessen die Serviceverträge:
Magento\Catalog\Api\ProductRepositoryInterface
und\Magento\Framework\Api\SearchCriteriaBuilder
use Magento\Framework\Api\Filter;
Erstellen Sie ein Suchkriterium und übergeben Sie es an $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
dann ist eine Reihe von Produkten.
Verwenden Sie SearchCriteria und Product Repositories:
$productIds = [.....];
$searchCriteria = $this->searchCriteriaBuilder
->addFilter('entity_id', $productIds, 'in')
->create();
$products = $this->productRepositoryInterface->getList($searchCriteria)->getItems();
Um den Builder für Suchkriterien und das Produkt-Repository-Objekt zu erhalten, müssen Sie Folgendes benötigen:
$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;