Magento2:データベーススキーマのアップグレード方法


29

私はmagentoカスタムモジュールに取り組んでいSetup\InstallSchema.phpます、モジュールには以前にインストールされたファイルがあります。データベースフィールドをいくつか追加したInstallSchema.phpため、テーブル構造を更新したいが、テーブルには変更が適用されていない。

スキーマの変更をデータベーステーブルに適用するにはどうすればよいですか?

プロセス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以下の回答コード?
スレシュChikani

まだ試していないが、カタログコアモジュールgithub.com/magento/magento2/blob/…の
FireBear

ほとんどの場合、エラーはクラスに定義された名前空間がないことから発生します。クラスのネームスペースが定義されていることを確認してください。
-soukaina

回答:


48

モジュールの既存のテーブルに列を追加する場合は、次のようにします。

ステップ1: Setupフォルダーの下に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」がありますが、主キーではないので、主キーとして追加します。
スレシュChikani

はい、modifyColumnByDdl()関数を使用して変更できます。以下はスキーマです。`public function modifyColumn($ tableName、$ columnName、$ definition、$ flushData = false、$ schemaName = null);`
Praful Rajput

「custome_id」フィールドを主キーとして適用するにはどうすればよいですか?コード例の説明。
スレシュChikani

「既存の列のタイプを変更する方法」を追加してください。あなたの質問に?
プラーフルラージプート

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){/ /あなたのコード}
Praful Rajput

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:モジュールでは、そのファイルのetcフォルダー内にmodule.xmlがあります。setup_version値(例:1.0.1から1.0.2)のバージョン値は、現在のバージョン値よりも高くなければなりません。

ステップ3:CLIからphp bin / magento setup:upgradeコマンドを実行します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.