สร้าง Magento 2 Upgrade Script เพื่อเพิ่ม / อัพเดทฟิลด์ใหม่ลงในตารางโมดูลที่กำหนดเอง


10

ใครมีความคิด / ข้อเสนอแนะเกี่ยวกับการสร้าง Magento 2 (เวอร์ชั่น CE เสถียร) สคริปต์อัพเกรด (ในโมดูลที่กำหนดเอง) สำหรับการเพิ่ม / อัปเดตฟิลด์ใหม่ลงในตารางที่กำหนดเอง?

ฉันรู้เกี่ยวกับ "InstallSchema" แต่มีบางอย่างเช่น "UpgradeSchema" สำหรับอัปเกรดตารางโมดูลหรือไม่

โปรดอธิบายโดยละเอียดพร้อมตัวอย่าง


@Pradeep Kumar คำตอบของคุณมีประโยชน์มาก ขอบคุณสำหรับการเริ่มต้น ต่อไปฉันได้เข้าไปลึกเข้าไปอีกเล็กน้อยแล้วพบว่าเราควรใช้เมธอด <i><changeColumn</pin </i> ในขณะที่เราเปลี่ยนชื่อคอลัมน์หรือชื่อและคำจำกัดความทั้งสอง และเราควรใช้ <i><MB แก้ไขโมดูลคอลัมน์ </i> เพื่อเปลี่ยนคำจำกัดความของคอลัมน์ รายละเอียดเพิ่มเติมที่ <i> Magento \ Framework \ DB \ Adapter \ AdapterInterface </i> ตัวอย่างที่ <i> Magento \ SalesRule \ Setup \ UpgradeSchema </i> ขอบคุณ
Sandipan S

คำตอบ:


28

สร้างapp\code\Sugarcode\Test\Setup\UpgradeSchema.phpและเรียกใช้คำสั่งอัพเกรด

เมื่อเคยมีการเปลี่ยนแปลงรุ่นเพียงแค่เปลี่ยนใน module.xml และใน UpgradeSchema.php เพิ่มอีกหนึ่งถ้าเงื่อนไขกับรุ่นเปรียบเทียบ

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

            // Changes here.
        }

ดังนั้นเมื่อคุณเรียกใช้คำสั่งอัพเกรดมันจะเรียกใช้UpgradeSchema.phpไฟล์และในนั้นมันจะเปรียบเทียบรุ่นตามรุ่นนั้นมันจะรันรหัส

อดีต

<?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>

หากใช้งานได้รับคำตอบให้คลิกที่สัญลักษณ์ด้านขวา


1
@ pradeep-kumar ความคิดเห็นคอลัมน์คือที่ addColumn และ changeColumn คาดหวังชื่อสกีมา public function addColumn($tableName, $columnName, $definition, $schemaName = null);. คุณสามารถใส่ความคิดเห็น 'ปรับปรุง' ในอาร์เรย์นิยาม $ ['comment' => 'Updated At']เช่น
Anton Evers

@Pradeep รุ่นของฉันคือ "1.0.0" ดังนั้นถ้า (version_compare ($ context-> getVersion (), '1.0.0', '<')) {} ตอนนี้มันจะใช้งานได้หรือไม่?
jafar pinjar

รุ่นเก่าคืออะไรถ้ารุ่นเก่าน้อยกว่า 1.0.0 แล้วมันใช้งานได้
Pradeep Kumar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.