i have strange problem/issue/bug/feature ... whatever...
Case: Every day on defined times a module will import a few special prices for some products. So in this case the cache and the index has to be rebuild/flushed for each products which has to be updated.
How is it implemented yet:
To improve the performance of the import and reduce the load on the database we use the
\Magento\Catalog\Model\Product\Action class to update the prices for the products:
/** @var \Magento\Catalog\Model\Product\Action $productAction */ $productAction->updateAttributes([$id], [ 'special_price' => 123.45, 'special_from_date' => '[...]' ], 0);
Lets get a little bit deeper into Magento and the indexer:
There are a few triggers in the database, which listen on the EAV-Tables.
So if there is an change on any table (in this case on
catalog_product_entity_decimal) there will be an insert into table
catalog_product_price_cl which triggers a reindex of the specific product.
Thats pretty cool :)
BUT: It seems to be that the parent product of a configurable product will not be reindexed. The customer (shop owner) also reported, that this issue also happens on a normal simple product (without a parent).
So I added an additional trigger to reindex the product and it's parents:
/** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable $configurableTypeInstance */ /** @var \Magento\GroupedProduct\Model\Product\Type\Grouped $groupedTypeInstance */ /** @var \Magento\Catalog\Model\Indexer\Product\Full $indexer */ $indexer->executeList(array_unique(array_merge( [$product->getId()], $configurableTypeInstance->getParentIdsByChild($product->getId()), $groupedTypeInstance->getParentIdsByChild($product->getId()), $product->getTypeInstance()->getParentIdsByChild($product->getId()) )));
But this will also not solve the problem, that the prices will not correctly displayed in the frontend. After checking the values in the database I noticed that the prices in the indexes are correct. (I am not sure if the extra-index which I added, is still necessary)
So I checked the installed Varnish-Cache (full_page cache). The Varnish-Cache is also valid. (adding a cache-buster to the URL will get a fresh page .... with the outdated special price :( )
I also checked the Block-HTML & Collection Cache. Also valid. (Cleared it, the price is still outdated.)
Now I have no idea anymore. And this is the reason why i coming up to you. What am I doing wrong?
I look forward for your answers!