Magento2: डेटाबेस स्कीमा उन्नयन के लिए कैसे


29

मैं Magento के कस्टम मॉड्यूल पर काम कर रहा हूं, मॉड्यूल में Setup\InstallSchema.phpफ़ाइल है जो पहले स्थापित है। मैंने कुछ और डेटाबेस फ़ील्ड जोड़े हैं, InstallSchema.phpइसलिए मैं तालिका संरचना को अपडेट करना चाहता हूं लेकिन तालिका में कोई परिवर्तन लागू नहीं किया गया है।

मैं डेटाबेस तालिका में स्कीमा परिवर्तन कैसे लागू कर सकता हूं?

स्कीमा को अपडेट करने के लिए मेरे पास प्रोसेस कमांड है लेकिन सफलता नहीं।

php bin/magento setup:db-schema:upgrade

तथा

php bin/magento setup:upgrade

आप "php bin / magento मॉड्यूल: अनइंस्टॉल" के साथ अनइंस्टॉल कर सकते हैं और अपना एक्सटेंशन फिर से इंस्टॉल कर सकते हैं। जैसे कि यह के UpgradeSchema.php जाँच करने के लिए एक और मुद्दा github.com/magento/magento2/commit/... तरह से इस समय यहाँ कोई साफ स्पष्टीकरण कैसे डेटा बेस के उन्नयन के लिए है लगता है, तो मैं भी सही जवाब यहाँ की प्रतीक्षा कर रही
FireBear

@FireBear उत्तर कोड के नीचे appy?
सुरेश चिकानी

अभी तक नहीं की कोशिश, लेकिन लगता सूचि कोर मॉड्यूल से नमूना के अनुसार सही कर github.com/magento/magento2/blob/...
FireBear

अधिकांश समय, त्रुटि वर्ग के लिए एक निर्धारित नामस्थान नहीं होने से आती है। जांचें कि आपने अपने लिए एक नामस्थान परिभाषित किया है।
सौकेना

जवाबों:


48

यदि आप अपने मॉड्यूल की मौजूदा तालिका में अधिक कॉलम जोड़ना चाहते हैं, तो आप निम्न कार्य कर सकते हैं।

चरण 1: सेटअप फ़ोल्डर के तहत UpgradSchema.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' है, लेकिन यह प्राथमिक कुंजी नहीं है अब मैं इसे प्राथमिक कुंजी के रूप में जोड़ना चाहता हूं।
सुरेश चिकानी

हाँ, आप इसे संशोधित कर सकते हैं RevColumnByDdl () फ़ंक्शन का उपयोग करके। निम्नलिखित स्कीमा है। `सार्वजनिक फ़ंक्शन संशोधित करें कॉलम ($ तालिका नाम, $ कॉलम नाम, $ परिभाषा, $ फ़्लशडेट = गलत, $ स्कीमा नाम = अशक्त);`
प्रफुल्ल राजपूत

प्राथमिक कुंजी के रूप में मैं 'custome_id' फ़ील्ड कैसे लागू कर सकता हूं? कोड एक्सान को स्पष्ट करें।
सुरेश चिकानी

क्या आप कृपया "हम किस प्रकार के मौजूदा कॉलम को संशोधित कर सकते हैं?" आपके सवाल में
प्रफुल्ल राजपूत

3
@ कीयूर शाह, आपको नई फ़ाइल बनाने की आवश्यकता नहीं है एम 2। आपको UpgradSchema.php में निम्नलिखित कोड डालना होगा और साथ ही setup.version को मॉड्यूल.xml में अपडेट करना होगा। if (version_compare ($ संदर्भ-> getVersion) (), '1.0.0') <0) {// आप कोड} अगर (version_compare ($ संदर्भ-> getVersion) (), '1.0.1') <0) {/ / आपका कोड}
प्रफुल्ल राजपूत

2

इंस्टॉलर स्कीमा को अपग्रेड करने के लिए आपको 'UpgradSchema.php' लिखना होगा,

UpgradSchema.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: आपके मॉड्यूल में आपको फ़ाइल बदलने के लिए setup.version मान के अंदर फ़ोल्डर आदि में मॉड्यूल। Xml मिल जाएगा (उदा: 1.0.1 से 1.0.2) संस्करण मान वर्तमान संस्करण मान अधिक होना चाहिए।

चरण 3: रन php बिन / Magento सेटअप: CLI से उन्नयन कमांड

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