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.

Vicky Dev
sumber
@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

Pradeep Kumar
sumber
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