Buat Magento 2 Upgrade Script untuk menambah / memperbarui bidang baru ke dalam tabel modul khusus


10

Adakah yang punya ide / saran tentang pembuatan Magento 2 (versi Stabil CE) Skrip Peningkatan (dalam modul khusus) untuk menambahkan / memperbarui bidang baru ke dalam tabel khusus?

Saya tahu tentang "InstallSchema" tetapi apakah ada sesuatu seperti "UpgradeSchema" untuk memutakhirkan tabel modul?

Tolong jelaskan secara rinci dengan contoh.


@Pradeep Kumar Jawaban Anda sangat membantu. Terima kasih sudah memulai. Selanjutnya saya telah melewati sedikit lebih dalam dan menemukan bahwa, kita harus menggunakan metode <i><b> kolom perubahan </ b / </i> sementara kita mengubah nama kolom atau nama & definisi keduanya. Dan kita harus menggunakan <i><b> modifyColumn</b> </i> untuk mengubah definisi kolom. Lebih detail di <i> Magento \ Framework \ DB \ Adapter \ AdapterInterface </i> Contoh di <i> Magento \ SalesRule \ Setup \ UpgradeSchema </i> Terima kasih
Sandipan S

Jawaban:


28

buat app\code\Sugarcode\Test\Setup\UpgradeSchema.phpdan jalankan perintah peningkatan

ketika versi pernah diubah, ubah saja module.xml dan di UpgradeSchema.php tambahkan satu lagi jika kondisi dengan versi membandingkan

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

            // Changes here.
        }

jadi ketika Anda menjalankan perintah upgrade itu akan menjalankan UpgradeSchema.phpfile dan dalam hal itu akan membandingkan versi berdasarkan versi itu akan menjalankan kode

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>

jika berhasil menerima jawabannya dengan mengklik simbol kanan


1
@ pradeep-kumar Komentar kolom adalah tempat addColumn dan changeColumn mengharapkan nama skema. public function addColumn($tableName, $columnName, $definition, $schemaName = null);. Anda dapat menempatkan komentar 'Diperbarui Di' dalam array $ definition seperti ['comment' => 'Updated At'].
Anton Evers

@Pradeep, Versi saya adalah "1.0.0", jadi jika (version_compare ($ context-> getVersion (), '1.0.0', '<')) {} sekarang apakah akan berfungsi atau tidak?
jafar pinjar

apa versi yang lebih lama, jika versi yang lebih tua kurang dari 1.0.0 lalu berfungsi
Pradeep Kumar
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.