Holen Sie sich die Produktkollektion mit Produkt-IDs


Antworten:


14

Bei einer instanziierten, aber nicht geladenen Sammlung $collection und einer Reihe von Produkt-IDs $productIdskö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\CollectionFactoryund 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:

  • Injizieren Magento\Catalog\Api\ProductRepositoryInterfaceund\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.


1
Vielleicht fehlt mir etwas, aber die Verwendung von Repositorys scheint keine vollständige Kontrolle über das Ergebnis zu ermöglichen. Beispiel: Wie fügen Sie EAV-Entitäten ein Attribut hinzu? Oder sich einem externen Tisch anschließen? In diesem Fall sehe ich immer noch, dass Magento2 Core Sammlungen verwendet. Gibt es eine gültige Alternative? Vielen Dank!
Alessandro Ronchi

1
Leider gibt es nicht. Es gibt oft Fälle, in denen Sie noch Sammlungen benötigen. Siehe auch: magento.stackexchange.com/a/158098/243
Fabian Schmengler

Genau mein Problem jetzt. Ich habe eine Arbeitsmethode erstellt, um ein Ergebnis mit dem Repository zu erhalten, und das Ergebnis konnte nicht geändert werden (oder sogar ordentlich in eine Sammlung eingefügt werden, fehlende Methoden zum Hinzufügen / Festlegen von Daten ... und viele andere Probleme).
LM_Fielding

9

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:

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

Ich möchte die Produktkollektion von meinen Entitäts-IDs erhalten. Bitte geben Sie mir den vollständigen Code oder die Idee!
Sushivam

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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.