Magento2 InstallSchema मौजूदा तालिका में नया कॉलम जोड़ें


11

मैं Magento2 में मौजूदा तालिका में नया कॉलम जोड़ने की कोशिश कर रहा हूं

<?php

namespace Vendor\Module\Setup;

use Magento\Framework\Setup\InstallSchemaInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\SchemaSetupInterface;

/**
 * @codeCoverageIgnore
 */
class InstallSchema implements InstallSchemaInterface
{

    /**
     * {@inheritdoc}
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    public function install(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {
        $installer = $setup;

        $installer->startSetup();

        $eavTable = $installer->getTable('eav_attribute');

        $columns = [
            'my_column' => [
                'type' => \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                'length' => '1',
                'nullable' => false,
                'comment' => 'Description of my column',
            ],
        ];

        $connection = $installer->getConnection();
        foreach ($columns as $name => $definition) {
            $connection->addColumn($eavTable, $name, $definition);
        }

        $installer->endSetup();
    }
}

php बिन / Magento सेटअप: उन्नयन

कुछ नहीं हुआ

अपडेट १।

यदि मैं स्पष्ट रूप से लक्ष्य को समझता हूं, तो InstallSchema केवल तभी निष्पादित होता है जब सेटअप तालिका में कोई मान नहीं होता है। यदि आपका मॉड्यूल पहले से सिस्टम में स्थापित है - आपको UpgradSchema में कोई भी बदलाव करने की आवश्यकता है। ऐसा इसलिए क्योंकि मेरी फाइल पर अमल नहीं हुआ। जब मैंने नवीनीकरण करने और आवश्यक परिवर्तन करने के लिए इसका नाम बदला - सब कुछ ठीक से काम करना शुरू कर दिया

जवाबों:


7

पहले, मैं मान रहा हूँ जब आप कहते हैं कि कुछ नहीं होता है, तो आपका मतलब है कि सेटअप स्क्रिप्ट सामान्य रूप से चलती है, लेकिन कोई भी त्रुटि आउटपुट नहीं है और आपके डेटाबेस में कोई बदलाव नहीं किया गया है। यदि यह सही धारणा नहीं है, तो कृपया मुझे बताएं!

जब मैं स्कीमा में अपग्रेड करता हूं, तो मैं ए नहीं करता getTable(), मुझे लगता है कि यह बहुत ही शानदार है।

मैंने उस परिवर्तन के साथ उपरोक्त स्क्रिप्ट का परीक्षण किया, और इसने काम किया, इसलिए मेरे द्वारा उठाए जाने वाले दो समस्या निवारण चरण हैं:

  1. सुनिश्चित करें कि आपने setup_versionअपने module.xml(या आपकी स्क्रिप्ट बिल्कुल नहीं चलेगी) में वृद्धि की है
  2. अपनी अपग्रेड स्क्रिप्ट में कुछ स्पष्ट त्रुटि जोड़ें यह देखने के लिए कि क्या यह सब चल रहा है ... यदि कोई त्रुटि है और स्क्रिप्ट चल रही है, तो आपको रनिंग करते समय त्रुटि संदेश मिलेंगे setup:upgrade

मुझे आशा है कि वह मदद करेंगे!


1
आपकी प्रतिक्रिया के लिए धन्यवाद। यदि मैं स्पष्ट रूप से लक्ष्य को समझता हूं, तो InstallSchema केवल तभी निष्पादित होता है जब सेटअप तालिका में कोई मान नहीं होता है। यदि आपका मॉड्यूल पहले से सिस्टम में स्थापित है - आपको UpgradSchema में कोई भी बदलाव करने की आवश्यकता है। ऐसा इसलिए क्योंकि मेरी फाइल पर अमल नहीं हुआ। जब मैंने इसे उन्नत करने और आवश्यक परिवर्तन करने के लिए इसका नाम बदल दिया - सब कुछ ठीक से काम करना शुरू कर दिया
zhartaunik

मुझे क्षमा करें, यह 100% सही है, चरण 1 सेटअप_मॉडल तालिका से प्रविष्टि को हटाने या इसे अपग्रेड स्क्रिप्ट बनाने के लिए होना चाहिए था। मुझे खुशी है कि यह आपके लिए काम कर रहा है!
Jer_

0

तालिका 'setup_module' से मॉड्यूल की प्रविष्टि हटाएं, फिर कमांड php bin / magento सेटअप चलाएं: अपग्रेड करें। यह काम करेगा।


0

आप एक स्क्रिप्ट बना सकते हैं और आप फ़ोल्डर में dbscripts और इस फ़ाइल को टर्मिनल या वेब ब्राउज़र से चला सकते हैं।

उदाहरण के लिए फ़ाइल को pub/dbscripts/filename.phpइस कोड को पेस्ट करें और अपनी आवश्यकता के अनुसार बदल दें

<?php
use Magento\Framework\App\Bootstrap;
require '../../app/bootstrap.php';
$bootstrap = Bootstrap::create(BP, $_SERVER);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
error_reporting(E_ALL);
ini_set('display_errors', 1);
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();

$salesTable = $resource->getTableName('Table_Name');
$sql = "ALTER TABLE ".$salesTable. " ADD `Field_name` varchar(255)";
$connection->query($sql);

echo"Script Run Successfully";

इस फाइल को ब्राउजर से चलाएं

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