Menggunakan objek pabrik produk, saya dapat membuat produk, mengambil koleksi produk, dan mengambil item pertama dari koleksi itu
/* var $productFactory \Magento\Catalog\Model\ProductFactory */
$product = $this->productFactory->create()->getCollection()->getFirstItem();
Namun, jika saya mencoba menambahkan store_id ke filter koleksi
$product = $this->productFactory
->create()
->getCollection()
->addFieldToFilter('store_id', 1)
->getFirstItem();
Saya mendapatkan kesalahan berikut
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}
Hal yang sama terjadi jika saya mencoba menggunakan repositori produk untuk memfilter oleh store_id (repositori menggunakan koleksi di bawah tenda).
Apakah ini bug? Atau apakah hubungan antara toko, situs web, dan produk berubah di Magento 2 sedemikian rupa sehingga ini bukan lagi permintaan yang sah? Kedua? Bukan? Sesuatu yang lain
php
magento2
collection
Alan Storm
sumber
sumber
Jawaban:
Anda dapat melakukannya dengan metode ini
addStoreFilter()
, lihatMagento\Catalog\Model\ResourceModel\Product\Collection#addStoreFilter()
yang
addStoreFilter()
fungsi akan menerima toko ID atauStore
objek sebagai parameter.EG, untuk mendapatkan semua produk untuk toko saat ini :
Semoga ini bisa membantu.
sumber
Untuk saat ini ini terlihat seperti bug, karena tidak ada kemungkinan untuk menerapkan filter toko dengan
ProductRepository::getList()
metode ini, melewati id toko sebagai filter dari SearchCriteria .Dalam implementasi getList, Anda dapat menemukan bahwa semua filter dari SearchCriteria diterapkan ke koleksi
Di
Magento\Catalog\Model\ProductRepository::addFilterGroupToCollection
sana ada penanganan khusus untuk filter Kategori , tetapi tidak ada satu untuk Store.Jadi, kondisi tambahan harus ditambahkan ke
Magento\Catalog\Model\ProductRepository::addFilterGroupToCollection
yang memeriksa apakah kita memiliki filter toko dan jika kita telah - mengatur id toko untuk koleksi, sesuatu seperti:Dibuat bug internal untuk masalah ini, jumlahnya adalah MAGETWO-45950
sumber
setStore()
juga menentukan nilai atribut khusus toko mana yang diambil? Atau apakah ini dilakukan dengan cara yang berbeda sekarang?Jika Anda menggunakan model khusus dengan beberapa tabel tambahkan table_name seperti:
addFieldToFilter('**table_name.**column_name', 1)
sumber
1) Kelasnya adalah
\Magento\Catalog\Model\ResourceModel\Category\Collection
:2) Kemudian metodenya
$collection->setStoreId(0);
sumber