Magento2: Як оновити схему бази даних


29

Я працюю над спеціальним модулем magento, в модулі є Setup\InstallSchema.phpфайл, який встановлений раніше. я додав ще кілька полів бази даних, InstallSchema.phpтому я хочу оновити структуру таблиці, але таблиця не застосувала жодних змін.

Як я можу застосувати зміни схеми до таблиці баз даних?

У мене є команди cli cli для оновлення схеми, але не мають успіху.

php bin/magento setup:db-schema:upgrade

і

php bin/magento setup:upgrade

Ви можете видалити програму "php bin / magento module: uninstall" та встановити розширення заново. Ще один момент, щоб перевірити це UpgradeSchema.php, як github.com/magento/magento2/commit/… Начебто в цей момент тут немає чіткого пояснення, як оновити базу даних, тому я також з нетерпінням чекаю правильної відповіді тут
FireBear

@FireBear appy нижче коду відповіді?
Суреш Чікані

ще не пробуйте, але виглядає правильно відповідно до зразка з базового модуля каталогу github.com/magento/magento2/blob/…
FireBear

В основному помилка виникає через відсутність у класі визначеної простори імен. Переконайтеся, що ви визначили простір імен для свого класу.
soukaina

Відповіді:


48

Якщо ви хочете додати більше стовпців до існуючої таблиці вашого модуля, ви можете зробити наступне.

Крок 1: Створіть UpgradeSchema.php у папці Налаштування. Отримайте ідею з наступного коду.

namespace Vendor\ModuleName\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
class UpgradeSchema implements  UpgradeSchemaInterface
{
    public function upgrade(SchemaSetupInterface $setup,
                            ModuleContextInterface $context){
        $setup->startSetup();
        if (version_compare($context->getVersion(), '1.0.1') < 0) {

            // Get module table
            $tableName = $setup->getTable('table_name');

            // Check if the table already exists
            if ($setup->getConnection()->isTableExists($tableName) == true) {
                // Declare data
                $columns = [
                    'imagename' => [
                        'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                        'nullable' => false,
                        'comment' => 'image name',
                    ],
                ];

                $connection = $setup->getConnection();
                foreach ($columns as $name => $definition) {
                    $connection->addColumn($tableName, $name, $definition);
                }

            }
        }

        $setup->endSetup();
    }
}

Крок 2: Змініть setup_versionзначення вmodule.xml

Крок 3: Запустіть php bin/magento setup:upgradeкоманду від CLI


1
чи можете ви пояснити, як я можу додати первинний ключ за допомогою сценарію оновлення? у моїй таблиці є "customer_id", але це не первинний ключ, тепер я хочу додати його як первинний ключ.
Суреш Чікані

Так, ви можете змінити його за допомогою функції modifyColumnByDdl (). Далі йде схема. `публічна функція modifyColumn ($ tableName, $ columnName, $ definition, $ flushData = false, $ schemaName = null);`
Praful Rajput

Як я можу застосувати поле "custome_id" як основний ключ? пояснити приклад коду.
Суреш Чікані

Ви можете, будь ласка, додати "Як ми можемо змінити тип існуючого стовпця?" у вашому питанні?
Молебний Раджпут

3
@Keyur Shah, вам не потрібно створювати новий файл M2. Вам слід ввести наступний код у UpgradeSchema.php та оновити setup_version на module.xml. if (version_compare ($ context-> getVersion (), '1.0.0') <0) {// ви код} if (version_compare ($ context-> getVersion (), '1.0.1') <0) {/ / ваш код}
Похвальний Раджпут

2

Щоб оновити схему установки, вам потрібно написати "UpgradeSchema.php",

приклад UpgradeSchema.php:

namespace <namespace>\<modulename>\Setup;

use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\UpgradeSchemaInterface;

/**
* @codeCoverageIgnore
*/
class UpgradeSchema implements UpgradeSchemaInterface
{
    /**
 * {@inheritdoc}
 */
public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
    $installer = $setup;

    $installer->startSetup();

    /*your code here*/

    $installer->endSetup();
}
}

Крок 2: У вашому модулі ви знайдете module.xml всередині папки тощо в цьому файлі, яке змінює значення setup_version (наприклад: 1.0.1 до 1.0.2), значення версії повинно бути вище поточного значення версії.

Крок 3: Запустіть налаштування php bin / magento: команда оновлення від CLI

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.