/** * Reindex on product delete * * @param \Magento\Catalog\Model\ResourceModel\Product $productResource * @param \Closure $proceed * @param \Magento\Framework\Model\AbstractModel $product * @return \Magento\Catalog\Model\ResourceModel\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundDelete(\Magento\Catalog\Model\ResourceModel\Product $productResource, \Closure $proceed, \Magento\Framework\Model\AbstractModel $product) { $productResource->addCommitCallback(function () use($product) { $this->reindexRow($product->getEntityId()); }); return $proceed($product); }
/** * @param ResourceProduct $productResource * @param \Closure $proceed * @param AbstractModel $product * @return ResourceProduct * @throws \Exception */ private function addCommitCallback(ResourceProduct $productResource, \Closure $proceed, AbstractModel $product) { try { $productResource->beginTransaction(); $result = $proceed($product); $productResource->addCommitCallback(function () use($product) { $this->reindexRow($product->getEntityId()); }); $productResource->commit(); } catch (\Exception $e) { $productResource->rollBack(); throw $e; } return $result; }
/** * {@inheritdoc} */ public function addCommitCallback($callback) { $pluginInfo = $this->pluginList->getNext($this->subjectType, 'addCommitCallback'); if (!$pluginInfo) { return parent::addCommitCallback($callback); } else { return $this->___callPlugins('addCommitCallback', func_get_args(), $pluginInfo); } }