Magento2: come aggiornare lo schema del database


29

Sto lavorando sul modulo personalizzato magento, nel modulo ho Setup\InstallSchema.phpfile che è stato installato prima. ho aggiunto alcuni campi di database in più, InstallSchema.phpquindi voglio aggiornare la struttura della tabella ma la tabella non ha applicato alcuna modifica.

Come posso applicare le modifiche dello schema alla tabella del database?

Ho i comandi di processo cli per aggiornare lo schema ma non il successo.

php bin/magento setup:db-schema:upgrade

e

php bin/magento setup:upgrade

È possibile disinstallare con "php bin / magento module: uninstall" e reinstallare nuovamente l'estensione. Un altro punto da verificare è UpgradeSchema.php come github.com/magento/magento2/commit/… Sembra che in questo momento non ci sia una spiegazione
chiara su

@FireBear appy sotto il codice di risposta?
Suresh Chikani,

non provare ancora, ma sembra corretto secondo l'esempio dal modulo principale del catalogo github.com/magento/magento2/blob/…
FireBear,

Il più delle volte, l'errore deriva dal fatto di non avere uno spazio dei nomi definito per la classe. Verifica di aver definito uno spazio dei nomi per la tua classe.
Soukaina,

Risposte:


48

Se vuoi aggiungere più colonne nella tabella esistente del tuo modulo, puoi fare quanto segue.

Passaggio 1: creare UpgradeSchema.php nella cartella Setup. Ottieni Idea dal seguente codice.

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();
    }
}

Passaggio 2: modificare il setup_versionvalore inmodule.xml

Passaggio 3: eseguire il php bin/magento setup:upgradecomando dalla CLI


1
puoi cancellare come posso aggiungere la chiave primaria usando lo script di aggiornamento? nella mia tabella ho "customer_id" ma non è la chiave primaria ora voglio aggiungerla come chiave primaria.
Suresh Chikani,

Sì, puoi cambiarlo usando la funzione editColumnByDdl (). Di seguito è riportato lo schema. `public function editColumn ($ tableName, $ columnName, $ definition, $ flushData = false, $ schemaName = null);`
Praful Rajput,

Come posso applicare il campo 'custome_id' come chiave primaria? spiega il codice exanple.
Suresh Chikani,

Puoi aggiungere "Come possiamo modificare il tipo di colonna esistente?" nella tua domanda?
Praful Rajput,

3
@Keyur Shah, non è necessario creare un nuovo file M2. Devi inserire il seguente codice in UpgradeSchema.php e aggiornare setup_version anche in module.xml. if (version_compare ($ context-> getVersion (), '1.0.0') <0) {// you code} if (version_compare ($ context-> getVersion (), '1.0.1') <0) {/ / your code}
Praful Rajput,

2

Per aggiornare il programma di installazione devi scrivere "UpgradeSchema.php",

esempio di 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();
}
}

Passo 2: Nel tuo modulo troverai module.xml all'interno della cartella etc in quel file cambia il valore di setup_version (es: da 1.0.1 a 1.0.2) il valore della versione dovrebbe essere superiore al valore della versione corrente.

Passaggio 3: esegui php bin / magento setup: aggiorna il comando dalla CLI

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.