Mithilfe eines Product Factory-Objekts kann ich ein Produkt erstellen, eine Produktsammlung abrufen und das erste Element dieser Sammlung abrufen
/* var $productFactory \Magento\Catalog\Model\ProductFactory */
$product = $this->productFactory->create()->getCollection()->getFirstItem();
Wenn ich jedoch versuche, dem Filter der Sammlung eine store_id hinzuzufügen
$product = $this->productFactory
->create()
->getCollection()
->addFieldToFilter('store_id', 1)
->getFirstItem();
Ich erhalte den folgenden Fehler
Invalid attribute name: store_id
#0 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(1434): Magento\Eav\Model\Entity\Collection\AbstractCollection->_addAttributeJoin('store_id', 'inner')
#1 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(359): Magento\Eav\Model\Entity\Collection\AbstractCollection->_getAttributeConditionSql('store_id', 1, 'inner')
#2 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Catalog/Model/Resource/Product/Collection.php(1489): Magento\Eav\Model\Entity\Collection\AbstractCollection->addAttributeToFilter('store_id', 1, 'inner')
#3 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(382): Magento\Catalog\Model\Resource\Product\Collection->addAttributeToFilter('store_id', 1)
...
#63 {main}
Das gleiche passiert, wenn ich versuche, ein Produkt-Repository zum Filtern nach store_id zu verwenden (die Repositorys verwenden die Sammlungen unter der Haube).
Ist das ein Fehler? Oder haben sich die Beziehungen zwischen Geschäften, Websites und Produkten in Magento 2 so geändert, dass dies keine legitime Abfrage mehr ist? Beide? Weder? Etwas anderes?
php
magento2
collection
Alan Storm
quelle
quelle
Antworten:
Sie können dies mit der Methode tun
addStoreFilter()
, sieheMagento\Catalog\Model\ResourceModel\Product\Collection#addStoreFilter()
Die
addStoreFilter()
Funktion akzeptiert die Speicher-ID oder dasStore
Objekt als Parameter.EG, um alle Produkte für das aktuelle Geschäft zu erhalten:
Hoffentlich hilft das.
quelle
Im Moment sieht dies wie ein Fehler aus, da es keine Möglichkeit gibt, einen Speicherfilter mit der
ProductRepository::getList()
Methode anzuwenden und die Speicher-ID als Filter für SearchCriteria zu übergeben .In der getList-Implementierung finden Sie, dass alle Filter von SearchCriteria auf die Sammlung angewendet wurden
Es
Magento\Catalog\Model\ProductRepository::addFilterGroupToCollection
gibt eine spezielle Behandlung für Kategoriefilter , aber es gibt niemanden für Store.Daher sollte eine zusätzliche Bedingung hinzugefügt werden,
Magento\Catalog\Model\ProductRepository::addFilterGroupToCollection
die prüft, ob wir einen Speicherfilter haben und ob wir - die Speicher-ID für die Sammlung festgelegt haben, etwa:Interner Fehler für dieses Problem erstellt, seine Nummer ist MAGETWO-45950
quelle
setStore()
auch an, welche speicherspezifischen Attributwerte abgerufen werden? Oder wird das jetzt anders gemacht?Wenn Sie ein benutzerdefiniertes Modell mit mehreren Tabellen verwenden, fügen Sie tabellennamen wie folgt hinzu:
addFieldToFilter('**table_name.**column_name', 1)
quelle
1) Die Klasse ist
\Magento\Catalog\Model\ResourceModel\Category\Collection
:2) Dann ist die Methode
$collection->setStoreId(0);
quelle