Удалите создание триггера при изменении режима индексатора


Я отключил модуль 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" />.
удаление упомянутой выше строки заставляет все работать так, как ожидалось. Очевидно, что я не могу удалить настройку конфигурации.
Есть идеи, как я могу обойти это?

Author: Marius, 2018-12-11

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

 2
Author: Marius, 2018-12-12 07:30:19