Magento2: Comment mettre à niveau le schéma de base de données

29

Je travaille sur le module personnalisé magento, dans le Setup\InstallSchema.phpfichier module qui est installé avant. J'ai ajouté quelques champs de base de données supplémentaires, InstallSchema.phpdonc je veux mettre à jour la structure de la table, mais la table n'a appliqué aucun changement.

Comment puis-je appliquer des modifications de schéma à la table de base de données?

J'ai des commandes cli de processus pour mettre à jour le schéma mais pas le succès.

php bin/magento setup:db-schema:upgrade

et

php bin/magento setup:upgrade
Suresh Chikani
la source
Vous pouvez désinstaller avec "module php bin / magento: désinstaller" et réinstaller votre extension. Un autre point pour vérifier que c'est UpgradeSchema.php comme github.com/magento/magento2/commit/… Il semble qu'en ce moment, il n'y a pas d'explication claire sur la mise à niveau de la base de données, donc j'ai hâte de corriger la réponse ici
FireBear
@FireBear appy ci-dessous le code de réponse?
Suresh Chikani,
pas encore essayé, mais semble correct selon l'échantillon du module de base du catalogue github.com/magento/magento2/blob/…
FireBear
La plupart du temps, l'erreur provient de l'absence d'un espace de noms défini pour la classe. Vérifiez que vous avez défini un espace de noms pour votre classe.
soukaina

Réponses:

48

Si vous souhaitez ajouter plus de colonne dans la table existante de votre module, vous pouvez procéder comme suit.

Étape 1: créez UpgradeSchema.php sous le dossier d'installation. Obtenez une idée à partir du code suivant.

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

Étape 2: modifiez la setup_versionvaleur dansmodule.xml

Étape 3: exécuter la php bin/magento setup:upgradecommande à partir de CLI

Praful Rajput
la source
1
pouvez-vous expliquer comment ajouter une clé primaire à l'aide d'un script de mise à niveau? dans ma table ont 'customer_id' mais ce n'est pas la clé primaire maintenant je veux l'ajouter comme clé primaire.
Suresh Chikani
Oui, vous pouvez le changer en utilisant la fonction modifyColumnByDdl (). Voici le schéma. `fonction publique modifyColumn ($ tableName, $ columnName, $ definition, $ flushData = false, $ schemaName = null);`
Praful Rajput
Comment puis-je appliquer le champ 'custome_id' comme clé primaire? expliquer le code par exemple.
Suresh Chikani
Pouvez-vous s'il vous plaît ajouter "Comment pouvons-nous modifier le type de colonne existante?" dans votre question?
Praful Rajput
3
@Keyur Shah, vous n'avez pas besoin de créer un nouveau fichier M2. Vous devez mettre le code suivant dans UpgradeSchema.php et mettre à jour setup_version dans module.xml également. if (version_compare ($ context-> getVersion (), '1.0.0') <0) {// votre code} if (version_compare ($ context-> getVersion (), '1.0.1') <0) {/ / votre code}
Praful Rajput
2

Pour mettre à niveau le schéma d'installation, vous devez écrire «UpgradeSchema.php»,

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

Étape 2: Dans votre module, vous trouverez module.xml à l'intérieur du dossier etc dans ce fichier.

Étape 3: Exécutez la configuration de php bin / magento: commande de mise à niveau à partir de la CLI

Sheshgiri Anvekar
la source