Skip to content

Commit 06df99c

Browse files
authored
Merge pull request #2451 from magento-performance/MAGETWO-90575
[PERFORMANCE] Use price index to calculate price for configurable products
2 parents 116c2c3 + 391b8bf commit 06df99c

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\ConfigurableProduct\Model\ResourceModel\Product;
7+
8+
use Magento\Catalog\Model\ResourceModel\Product\LinkedProductSelectBuilderInterface;
9+
10+
/**
11+
* Used in Magento\ConfigurableProduct\Pricing\Price\LowestPriceOptionsProvider
12+
* to provide queries to select configurable product option with lowest price
13+
*
14+
* @see app/code/Magento/ConfigurableProduct/etc/di.xml
15+
*/
16+
class LinkedProductSelectBuilderComposite implements LinkedProductSelectBuilderInterface
17+
{
18+
/**
19+
* @var LinkedProductSelectBuilderInterface[]
20+
*/
21+
private $linkedProductSelectBuilder;
22+
23+
/**
24+
* @param LinkedProductSelectBuilderInterface[] $linkedProductSelectBuilder
25+
*/
26+
public function __construct($linkedProductSelectBuilder)
27+
{
28+
$this->linkedProductSelectBuilder = $linkedProductSelectBuilder;
29+
}
30+
31+
/**
32+
* {@inheritdoc}
33+
*/
34+
public function build($productId)
35+
{
36+
$selects = [];
37+
foreach ($this->linkedProductSelectBuilder as $productSelectBuilder) {
38+
$selects = array_merge($selects, $productSelectBuilder->build($productId));
39+
}
40+
41+
return $selects;
42+
}
43+
}

app/code/Magento/ConfigurableProduct/etc/di.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,13 @@
189189
<argument name="productIndexer" xsi:type="object">Magento\Catalog\Model\Indexer\Product\Full</argument>
190190
</arguments>
191191
</type>
192+
<virtualType name="LinkedProductSelectBuilderByIndexMinPrice" type="Magento\ConfigurableProduct\Model\ResourceModel\Product\LinkedProductSelectBuilderComposite">
193+
<arguments>
194+
<argument name="linkedProductSelectBuilder" xsi:type="array">
195+
<item name="indexPrice" xsi:type="object">Magento\Catalog\Model\ResourceModel\Product\Indexer\LinkedProductSelectBuilderByIndexPrice</item>
196+
</argument>
197+
</arguments>
198+
</virtualType>
192199
<type name="Magento\ConfigurableProduct\Pricing\Price\LowestPriceOptionsProvider">
193200
<arguments>
194201
<argument name="linkedProductSelectBuilder" xsi:type="object">Magento\ConfigurableProduct\Model\ResourceModel\Product\LinkedProductSelectBuilder</argument>
@@ -197,6 +204,7 @@
197204
<type name="Magento\ConfigurableProduct\Model\ResourceModel\Product\LinkedProductSelectBuilder">
198205
<arguments>
199206
<argument name="baseSelectProcessor" xsi:type="object">Magento\ConfigurableProduct\Model\ResourceModel\Product\StockStatusBaseSelectProcessor</argument>
207+
<argument name="linkedProductSelectBuilder" xsi:type="object">LinkedProductSelectBuilderByIndexMinPrice</argument>
200208
</arguments>
201209
</type>
202210
<type name="Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver">

0 commit comments

Comments
 (0)