Skip to content

Commit c40f065

Browse files
author
Munkh-Ulzii Balidar
committed
29251 fix product loading based row_id
1 parent 9eafa78 commit c40f065

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed

app/code/Magento/ConfigurableProduct/Helper/Data.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,11 @@
77
namespace Magento\ConfigurableProduct\Helper;
88

99
use Magento\Catalog\Model\Product\Image\UrlBuilder;
10+
use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
1011
use Magento\Framework\App\ObjectManager;
1112
use Magento\Catalog\Helper\Image as ImageHelper;
1213
use Magento\Catalog\Api\Data\ProductInterface;
14+
use Magento\Catalog\Model\Product;
1315
use Magento\Catalog\Model\Product\Image;
1416

1517
/**
@@ -73,7 +75,7 @@ public function getGalleryImages(ProductInterface $product)
7375
/**
7476
* Get Options for Configurable Product Options
7577
*
76-
* @param \Magento\Catalog\Model\Product $currentProduct
78+
* @param Product $currentProduct
7779
* @param array $allowedProducts
7880
* @return array
7981
*/
@@ -100,11 +102,13 @@ public function getOptions($currentProduct, $allowedProducts)
100102
/**
101103
* Get allowed attributes
102104
*
103-
* @param \Magento\Catalog\Model\Product $product
105+
* @param Product $product
104106
* @return array
105107
*/
106108
public function getAllowAttributes($product)
107109
{
108-
return $product->getTypeInstance()->getConfigurableAttributes($product);
110+
return ($product->getTypeId() == Configurable::TYPE_CODE)
111+
? $product->getTypeInstance()->getConfigurableAttributes($product)
112+
: [];
109113
}
110114
}

app/code/Magento/ConfigurableProductGraphQl/Model/Options/Collection.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,8 +186,8 @@ private function fetch() : array
186186
= $this->selectionUidFormatter->encode((int)$attribute->getId(), (int)$value['value_index']);
187187
$this->attributeMap[$productId][$attribute->getId()]['values'][$index]
188188
['is_available_for_selection'] =
189-
isset($options[$attribute['attribute_id']][$value['value_index']])
190-
&& $options[$attribute['attribute_id']][$value['value_index']];
189+
isset($options[$attribute->getAttributeId()][$value['value_index']])
190+
&& $options[$attribute->getAttributeId()][$value['value_index']];
191191
}
192192
}
193193
}
@@ -196,16 +196,21 @@ private function fetch() : array
196196
}
197197

198198
/**
199-
* Load products by entity ids
199+
* Load products by link field ids
200200
*
201201
* @param int[] $productIds
202202
* @return ProductInterface[]
203203
*/
204204
private function getProducts($productIds)
205205
{
206-
$this->searchCriteriaBuilder->addFilter('entity_id', $productIds, 'in');
206+
$linkField = $this->metadataPool->getMetadata(ProductInterface::class)->getLinkField();
207+
$this->searchCriteriaBuilder->addFilter($linkField, $productIds, 'in');
207208
$searchCriteria = $this->searchCriteriaBuilder->create();
208209
$products = $this->productRepository->getList($searchCriteria)->getItems();
209-
return $products;
210+
$productsLinkFieldMap = [];
211+
foreach ($products as $product) {
212+
$productsLinkFieldMap[$product->getData($linkField)] = $product;
213+
}
214+
return $productsLinkFieldMap;
210215
}
211216
}

app/code/Magento/ConfigurableProductGraphQl/Model/Variant/Collection.php

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
use Magento\Catalog\Api\Data\ProductInterface;
1111
use Magento\Catalog\Model\Product;
12+
use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
1213
use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection as ChildCollection;
1314
use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory;
1415
use Magento\Framework\EntityManager\MetadataPool;
@@ -175,19 +176,21 @@ private function fetch(ContextInterface $context = null) : array
175176
}
176177

177178
/**
178-
* Get attributes code
179+
* Get attributes codes for given product
179180
*
180-
* @param \Magento\Catalog\Model\Product $currentProduct
181+
* @param Product $currentProduct
181182
* @return array
182183
*/
183184
private function getAttributesCodes(Product $currentProduct): array
184185
{
185186
$attributeCodes = $this->attributeCodes;
186-
$allowAttributes = $currentProduct->getTypeInstance()->getConfigurableAttributes($currentProduct);
187-
foreach ($allowAttributes as $attribute) {
188-
$productAttribute = $attribute->getProductAttribute();
189-
if (!\in_array($productAttribute->getAttributeCode(), $attributeCodes)) {
190-
$attributeCodes[] = $productAttribute->getAttributeCode();
187+
if ($currentProduct->getTypeId() == Configurable::TYPE_CODE) {
188+
$allowAttributes = $currentProduct->getTypeInstance()->getConfigurableAttributes($currentProduct);
189+
foreach ($allowAttributes as $attribute) {
190+
$productAttribute = $attribute->getProductAttribute();
191+
if (!\in_array($productAttribute->getAttributeCode(), $attributeCodes)) {
192+
$attributeCodes[] = $productAttribute->getAttributeCode();
193+
}
191194
}
192195
}
193196

0 commit comments

Comments
 (0)