कस्टम मॉड्यूल तालिका में नए फ़ील्ड को जोड़ने / अपडेट करने के लिए Magento 2 अपग्रेड स्क्रिप्ट बनाएं


10

किसी को भी Magento 2 (CE स्थिर संस्करण) बनाने के बारे में कोई विचार / सुझाव है (कस्टम-मॉड्यूल में) स्क्रिप्ट को कस्टम तालिका में नए क्षेत्र को जोड़ने / अपडेट करने के लिए?

मैं "InstallSchema" के बारे में जानता हूं, लेकिन क्या मॉड्यूल टेबल को अपग्रेड करने के लिए "UpgradSchema" जैसा कुछ है?

कृपया उदाहरण के साथ विस्तार से बताएं।


@ प्रदीप कुमार आपका उत्तर बहुत मददगार था। हेड-स्टार्ट के लिए धन्यवाद। आगे मैं थोड़ा और गहराई से अंदर गया और पाया कि, हमें कॉलम नाम या नाम और परिभाषा दोनों को बदलने के दौरान <i> <b> changeColumn </ b> </ i> पद्धति का उपयोग करना चाहिए। और हमें स्तंभ की परिभाषा को बदलने के लिए <i> <b> संशोधितकॉल्यूमेंट </ b> </ i> का उपयोग करना चाहिए। <I> Magento \ Framework \ DB \ Adapter \ AdapterInterface </ i> में अधिक विवरण <i> Magento \ SalesRule \ Setup \ UpgradSchema </ i पर उदाहरण </ i> धन्यवाद
संदीपन S

जवाबों:


28

बनाएँ app\code\Sugarcode\Test\Setup\UpgradeSchema.phpऔर अपग्रेड कमांड चलाएं

जब कभी संस्करण सिर्फ मॉड्यूल में बदल गया था। xml और UpgradSchema.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
@ प्रदीप-कुमार कॉलम की टिप्पणी है कि ऐड-फॉर्मूला और चेंज कॉलम स्कीमा के नाम की अपेक्षा करते हैं। public function addColumn($tableName, $columnName, $definition, $schemaName = null);। आप टिप्पणी 'अद्यतित' जैसे $ परिभाषा सरणी में रख सकते हैं ['comment' => 'Updated At']
एंटोन एवर्स

@ प्रदीप, मेरा संस्करण "1.0.0" है, इसलिए यदि (संस्करण_प्रकार ($ संदर्भ-> getVersion) (), '1.0.0', '<')) {} अब यह काम करेगा या नहीं?
जफ़र पिंजर

पुराना संस्करण क्या है, अगर पुराना संस्करण कम है तो 1.0.0 तो यह काम करता है
प्रदीप कुमार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.