Почему не удаляется столбец в таблице при изменении db_schema.xml?

Описал таблицу в декларативной схеме (Magento 2.3):
app/code/Mi/DeclarativeSchema/etc/db_schema.xml
<?xml version="1.0"?>

<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <table name="mi_declarative_schema_test" resource="default" comment="Declarative schema test">
        <column xsi:type="int" name="id" identity="true" comment="ID Auto Increment" />
        <column xsi:type="varchar" name="name" length="1024" nullable="false" comment="Name" />
        <constraint xsi:type="primary" referenceId="PRIMARY">
            <column name="id" />
        </constraint>
    </table>
</schema>


Сделал setup:upgrade, таблица создалась, всё ок. Добавляю колумны, делаю апгрейд - они добавляются. Но когда удаляю колумны из xml, в таблице они не удаляются.
Вот тут https://devdocs.magento.com/guides/v2.3/extension-... написано, что достаточно просто удалить или закомментить строку колумна.
Magento подключается к базе под рутом.
  • Вопрос задан
  • 229 просмотров
Решения вопроса 1
link_web
@link_web
Magento, Laravel, Zend, Shopify, Prestashop, WP
Попробуйте это сделать, как это сделал я:
1) создайте файл db_schema.xml с такой структурой :
<?xml version="1.0"?>

<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <table name="mi_declarative_schema_new" resource="default" comment="Declarative schema test">
        <column xsi:type="int" name="id" identity="true" comment="ID Auto Increment" />
        <column xsi:type="text" name="name" comment="name" />
        <column xsi:type="text" name="email" comment="email" />
        <constraint xsi:type="primary" referenceId="PRIMARY">
            <column name="id" />
        </constraint>
    </table>
</schema>

2)Очистите кеш php bin/magento cache:flush
3)Сгенерируйте db_schema_whitelist.json файл используя команду
php bin/magento setup:db-declaration:generate-whitelist --module-name=Mi_DeclarativeSchema

3)Запустите upgrade php bin/magento setup:upgrade
После чего создастся новая таблица с колонками , которые мы указали :
5c38d696e4e86315879761.png
4)Далее закомментируем ненужный нам столбец :
<?xml version="1.0"?>

<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
    <table name="mi_declarative_schema_new" resource="default" comment="Declarative schema test">
        <column xsi:type="int" name="id" identity="true" comment="ID Auto Increment" />
        <column xsi:type="text" name="name" comment="name" />
        <!--<column xsi:type="text" name="email" comment="email" />-->
        <constraint xsi:type="primary" referenceId="PRIMARY">
            <column name="id" />
        </constraint>
    </table>

5)чистим кеш на всякий случай
6)запускаем генерацию whitelist опять .
php bin/magento setup:db-declaration:generate-whitelist --module-name=Mi_DeclarativeSchema

7)теперь запускаем upgrade
и воуля , наша колонка удалилась:
5c38d6b6722ca605434674.png

Суть в том, что нужно генерить whitelist после каждого изменения в базе, об этом можно почитать в документации подробнее. Но это временное решение (whitelist) и вскоре будет что-то новое, но пока что вот так .
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы