เพิ่มคอลัมน์อัพเกรด Schema Magento 2


11

ฉันต้องการแทรกเขตข้อมูลใหม่สำหรับตารางฐานข้อมูลในส่วนขยายที่กำหนดเองของฉันโดยใช้สกีมาอัพเกรดโดยทำตามโพสต์นี้แต่ฉันพบข้อผิดพลาด:

  [Zend_Db_Statement_Exception]                                                
  SQLSTATE[42S02]: Base table or view not found: 1146 Table 'Category Depth.l  
  ime_eleveniacategory' doesn't exist, query was: DESCRIBE `Category Depth`.`  
  lime_eleveniacategory` 

นี่คือรหัสของฉัน:

namespace Test\TestAgain\Setup;

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

class UpgradeSchema implements UpgradeSchemaInterface
{

    /**
     * {@inheritdoc}
     */
    public function upgrade(
        SchemaSetupInterface $setup,
        ModuleContextInterface $context
    ) {
        $setup->startSetup();
        if (version_compare($context->getVersion(), "1.0.0", "<")) {
        //Your upgrade script
        }
        if (version_compare($context->getVersion(), '1.0.1', '<')) {
          $tableName = $setup->getTable('lime_eleveniacategory'); 
          if ($setup->getConnection()->isTableExists($tableName) == true) {
                $connection = $setup->getConnection();
                $connection->addColumn(
                    $tableName,
                    'category_depth',
                    ['type' => \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,'nullable' => false, 'afters' => 'category_name'],
                    'Category Depth'
                );
            }
        }
        $setup->endSetup();
    }
}

คุณสร้างตาราง lime_eleveniacategory แล้วหรือยัง
Rakesh Jesadiya

@RakeshJesadiya ใช่ตารางมีอยู่ในฐานข้อมูล
Shell Suite

โปรดแชร์ไฟล์รหัสเต็มของคุณ
Rakesh Jesadiya

@RakeshJesadiya ตรวจสอบรหัสที่อัปเดตของฉัน
Shell Suite

ฉันได้ปรับปรุงคำตอบโปรดตรวจสอบ
Rakesh Jesadiya

คำตอบ:


33
namespace Test\TestAgain\Setup;

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

class UpgradeSchema implements UpgradeSchemaInterface
{

    /**
     * {@inheritdoc}
     */
    public function upgrade(
        SchemaSetupInterface $setup,
        ModuleContextInterface $context
    ) {
        $installer = $setup;

        $installer->startSetup();
        if (version_compare($context->getVersion(), "1.0.0", "<")) {
        //Your upgrade script
        }
        if (version_compare($context->getVersion(), '1.0.1', '<')) {
          $installer->getConnection()->addColumn(
                $installer->getTable('lime_eleveniacategory'),
                'category_depth',
                [
                    'type' => \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER,
                    'length' => 10,
                    'nullable' => true,
                    'comment' => 'Category Depth'
                ]
            );
        }
        $installer->endSetup();
    }
}

คุณสามารถรับรายละเอียดเพิ่มเติมได้ที่นี่เช่นกันอัพเกรดตารางฐานข้อมูล


สวัสดีฉันทำสิ่งเดียวกัน แต่ไม่มีการเพิ่มคอลัมน์ลงในตาราง
Sarfaraj Sipai

วิธีสร้างตารางใหม่โดยใช้ upgradechema ฉันมีโมดูลอยู่แล้ว
jafar pinjar

สวัสดี @Rakesh วิธีเพิ่มคอลัมน์ใหม่ในระหว่างคอลัมน์ที่มีอยู่
jafar pinjar

@Rakesh ฉันจะส่งเวอร์ชั่นที่นั่นได้อย่างไร ฉันกำลังพูดถึง 1.0.1
Magecode

ใน module.xml setup_version = "2.0.0" ของฉัน
Magecode

2

อีกหนึ่งสิ่งที่ต้องทำที่นี่ อัปเดตmodule.xmlเวอร์ชัน และอัปเกรดการตั้งค่าทำการทำดัชนีใหม่และลบแคช มันจะทำงาน.


1

ในการเพิ่มคอลัมน์หลายรายการ

    if (version_compare($context->getVersion(), '0.1.1', '<')) {
        $installer->getConnection()->addColumn(
            $installer->getTable('reply_newsletter_subscriber'),
            'field_1',
            [
                'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                'length' => 255,
                'nullable' => true,
                'comment' => 'Field_1'
            ]

        );
        $installer->getConnection()->addColumn(
            $installer->getTable('reply_newsletter_subscriber'),
            'field_2',
            [
                'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
                'length' => 255,
                'nullable' => true,
                'comment' => 'Field_2'
            ]
        );
    }
    $installer->endSetup();
}

0

ฉันลองสิ่งนี้

    <?php


namespace Test\TestAgain\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Quote\Setup\QuoteSetupFactory;
use Magento\Sales\Setup\SalesSetupFactory;
use Magento\Framework\DB\Ddl\Table;
use Magento\Quote\Setup\QuoteSetup;
use Magento\Sales\Setup\SalesSetup;

class InstallData implements InstallDataInterface
{
    protected $quoteSetupFactory;
    protected $salesSetupFactory;

    public function __construct(
        QuoteSetupFactory $quoteSetupFactory,
        SalesSetupFactory $salesSetupFactory
    ) {
        $this->quoteSetupFactory = $quoteSetupFactory;
        $this->salesSetupFactory = $salesSetupFactory;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
         $quoteInstaller = $this->quoteSetupFactory->create(['resourceName' => 'quote_setup', 'setup' => $setup]);
         $salesInstaller = $this->salesSetupFactory->create(['resourceName' => 'sales_setup', 'setup' => $setup]);

        $setup->startSetup();

        $setup->startSetup();
        $quoteInstaller->addAttribute('quote', 'custom_column', ['type' => Table::TYPE_TEXT]);
        $salesInstaller->addAttribute('order', 'custom_column', ['type' => Table::TYPE_TEXT]);
        $setup->endSetup();


        }
}

หรือ

<?php


namespace Test\TestAgain\Setup;

use Magento\Framework\Setup\UpgradeSchemaInterface;
use Magento\Framework\Setup\SchemaSetupInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Quote\Setup\QuoteSetupFactory;
use Magento\Sales\Setup\SalesSetupFactory;
use Magento\Framework\DB\Ddl\Table;
use Magento\Quote\Setup\QuoteSetup;
use Magento\Sales\Setup\SalesSetup;

class UpgradeSchema implements UpgradeSchemaInterface
{


    public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
    {


         $installer = $setup;
        $installer->startSetup();
        $connection = $installer->getConnection();
        $connection->addColumn($installer->getTable('quote'), 'custom_column', [
            'type'     => Table::TYPE_TEXT,
            'nullable' => true,
            'comment'  => 'Custom Column Name'
        ]);
        $connection->addColumn($installer->getTable('sales_order'), 'custom_column', [
            'type'     => Table::TYPE_TEXT,
            'nullable' => true,
            'comment'  => 'Custom Column Name'
        ]);

        $installer->endSetup();


        }
}

หมายเหตุ: หากคุณประสบปัญหาใด ๆ อาจเป็นเพราะโมดูลที่คุณติดตั้งไว้แล้ว อย่างที่คุณทราบถ้าโมดูลได้รับการติดตั้งแล้วการตั้งค่า: คำสั่งอัพเกรดจะไม่ติดตั้งสคี คุณจะต้องมองเข้าไปในตาราง setup_module ลบโมดูลของคุณออกจากตารางและเรียกใช้การตั้งค่า php bin / magento อีกครั้ง: คำสั่งอัพเกรด

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