Удалите создание триггера при изменении режима индексатора
Я отключил модуль Magento_Bundle
, потому что он мне не нужен.
Но теперь, когда я пытаюсь установить индекс catalogsearch_fulltext
на schedule
через интерфейс командной строки:
php bin/magento indexer:set-mode schedule catalogsearch_fulltext
Я получаю сообщение об ошибке:
Неизвестная ошибка процесса индексатора поиска по каталогу:
СОСТОЯНИЕ SQLSTATE[42S02]: Базовая таблица или представление не найдено: Таблица 1146 'catalog_product_bundle_selection' не существует, запрос был: СОЗДАТЬ ВЫЗВАТЬ trg_catalog_product_bundle_selection_after_insert ПОСЛЕ ВСТАВКИ НА catalog_product_bundle_selection ДЛЯ КАЖДОЙ СТРОКИ НАЧАТЬ ВСТАВКУ ИГНОРИРОВАТЬ В
catalogsearch_fulltext_cl
(entity_id
) ЦЕННОСТИ (НОВЫЙ.parent_product_id
); КОНЕЦ
Отследил это, и, по-видимому, это происходит потому, что в модуле Magento_CatalogSearch
в файле etc/mview.xml
есть эта строка, указанная для индекса catalogsearch_fulltext
<table name="catalog_product_bundle_selection" entity_column="parent_product_id" />
.
удаление упомянутой выше строки заставляет все работать так, как ожидалось. Очевидно, что я не могу удалить настройку конфигурации.
Есть идеи, как я могу обойти это?
1 answers
Я решил эту проблему с помощью обходного пути.
Я добавил плагин after
для метода Magento\Framework\Mview\View::getSubscriptions
, который удаляет catalog_product_bundle_selection
, если модуль пакета отключен.
di.xml
выглядит примерно так:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\Mview\View">
<plugin name="remove-bundle-dependency" type="[Vendor]\[Module]\Plugin\Mview\ViewPlugin"/>
</type>
</config>
[Vendor]/[Module]/Plugin/Mview/WiewPlugin.php
выглядит вот так.
<?php
namespace [Vendor]\[Module]\Plugin\Mview;
class ViewPlugin
{
/**
* @var \Magento\Framework\Module\ModuleList
*/
private $moduleList;
/**
* ViewPlugin constructor.
* @param ModuleList $moduleList
*/
public function __construct(\Magento\Framework\Module\ModuleList $moduleList)
{
$this->moduleList = $moduleList;
}
/**
* @param View $subject
* @param $subscriptions
* @return array
*/
public function afterGetSubscriptions(\Magento\Framework\Mview\View $subject, $subscriptions)
{
if (!$this->moduleList->has('Magento_Bundle')) {
unset($subscriptions['catalog_product_bundle_selection']);
}
return $subscriptions;
}
}
Также опубликовал это как проблему в репозитории magento 2: #19719