Crea Magento 2 Upgrade Script per aggiungere / aggiornare un nuovo campo nella tabella dei moduli personalizzati


10

Qualcuno ha qualche idea / suggerimento sulla creazione di Magento 2 (versione CE stabile) Script di aggiornamento (nel modulo personalizzato) per l'aggiunta / aggiornamento di un nuovo campo nella tabella personalizzata?

Conosco "InstallSchema" ma esiste qualcosa come "UpgradeSchema" per l'aggiornamento delle tabelle dei moduli?

Spiegare in dettaglio con esempi.


@Pradeep Kumar La tua risposta è stata molto utile. Grazie per il vantaggio. Successivamente ho approfondito un po 'di più e ho scoperto che dovremmo usare il metodo <i><b>changeColumn</b> </i> mentre cambiamo il nome della colonna o il nome e la definizione di entrambi. E dovremmo usare <i><b>modifyColumn</b> </i> per cambiare la definizione di colonna. Maggiori dettagli in <i> Magento \ Framework \ DB \ Adapter \ AdapterInterface </i> Esempio in <i> Magento \ SalesRule \ Setup \ UpgradeSchema </i> Grazie
Sandipan S

Risposte:


28

crea un app\code\Sugarcode\Test\Setup\UpgradeSchema.phpcomando ed esegui upgrade

ogni volta che la versione è stata cambiata basta cambiare in module.xml e in UpgradeSchema.php aggiungerne un'altra se la condizione con la versione confronta

if (version_compare($context->getVersion(), '2.0.1', '<')) {

            // Changes here.
        }

quindi quando esegui il comando upgrade eseguirà il UpgradeSchema.phpfile e in quanto confronterà la versione basata su quella versione eseguirà il codice

ex

<?php

namespace Sugarcode\Test\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\DB\Ddl\Table;

class UpgradeSchema implements UpgradeSchemaInterface
{
    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();
         $tableName = $setup->getTable('testtable');
        if (version_compare($context->getVersion(), '2.0.0') < 0) {
            // Changes here.
        }

        if (version_compare($context->getVersion(), '2.0.1', '<')) {

            // Changes here.
        }
        if (version_compare($context->getVersion(), '2.0.2', '<')) {
              if ($setup->getConnection()->isTableExists($tableName) == true) {
                $connection = $setup->getConnection();
                /* $connection->addColumn(
                    $tableName,
                    'updated_at',
                    ['type' => Table::TYPE_DATETIME,'nullable' => false, 'default' => '', 'afters' => 'created_at'],
                    'Updated At'
                ); */
                $connection->changeColumn(
                    $tableName,
                    'summary',
                    'short_summary',
                    ['type' => Table::TYPE_TEXT, 'nullable' => false, 'default' => ''],
                    'Short Summary'
                );
                // Changes here.
            }
        }


        $setup->endSetup();

    }
}

Module.xml

<?xml version="1.0"?>
    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
        <module name="Sugarcode_Test" setup_version="2.0.2" schema_version="2.0.2" />
    </config>

se funziona accetta la risposta facendo clic sul simbolo destro


1
@ pradeep-kumar Il commento della colonna è dove addColumn e changeColumn prevedono il nome dello schema. public function addColumn($tableName, $columnName, $definition, $schemaName = null);. Puoi inserire il commento 'Aggiornato alle' nell'array $ definition come ['comment' => 'Updated At'].
Anton Evers,

@Pradeep, La mia versione è "1.0.0", quindi se (version_compare ($ context-> getVersion (), '1.0.0', '<')) {} ora funzionerà o no?
jafar pinjar

qual è la versione precedente, se la versione precedente è inferiore alla 1.0.0, allora funziona
Pradeep Kumar,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.