Magento2: วิธีอัพเกรดสคีมาฐานข้อมูล


29

ฉันกำลังทำงานกับโมดูลที่กำหนดเองคุณภาพเยี่ยมในโมดูลมีSetup\InstallSchema.phpไฟล์ที่ติดตั้งมาก่อน ฉันได้เพิ่มเขตข้อมูลฐานข้อมูลเพิ่มเติมในInstallSchema.phpดังนั้นฉันต้องการปรับปรุงโครงสร้างตาราง แต่ตารางไม่ได้ใช้การเปลี่ยนแปลงใด ๆ

ฉันจะใช้การเปลี่ยนแปลงสคีมากับตารางฐานข้อมูลได้อย่างไร

ฉันมีคำสั่งกระบวนการ cli เพื่ออัปเดตสคีมา แต่ไม่สำเร็จ

php bin/magento setup:db-schema:upgrade

และ

php bin/magento setup:upgrade

คุณสามารถถอนการติดตั้งด้วย "โมดูล php bin / magento: ถอนการติดตั้ง" และติดตั้งส่วนขยายของคุณอีกครั้ง อีกจุดหนึ่งที่จะตรวจสอบว่าเป็น UpgradeSchema.php เช่นgithub.com/magento/magento2/commit/ ......ดูเหมือนว่าในขณะนี้ที่นี่ไม่มีคำอธิบายที่ชัดเจนเกี่ยวกับวิธีอัปเกรดฐานข้อมูลดังนั้นฉันจึงหวังว่าจะได้คำตอบที่ถูกต้อง
FireBear

@FireBear ด้านล่างมีรหัสคำตอบหรือไม่
Suresh Chikani

ยังไม่ลอง แต่
ดูถูก

ข้อผิดพลาดส่วนใหญ่เกิดจากการไม่มีเนมสเปซที่กำหนดไว้สำหรับคลาส ตรวจสอบว่าคุณได้กำหนด namespace สำหรับชั้นเรียนของคุณ
soukaina

คำตอบ:


48

หากคุณต้องการเพิ่มคอลัมน์เพิ่มเติมลงในตารางที่มีอยู่ในโมดูลของคุณคุณสามารถทำตามได้

ขั้นตอนที่ 1:สร้าง UpgradeSchema.php ในโฟลเดอร์ Setup รับแนวคิดจากรหัสต่อไปนี้

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' แต่มันไม่ใช่คีย์หลักตอนนี้ฉันต้องการเพิ่มเป็นคีย์หลัก
Suresh Chikani

ใช่คุณสามารถเปลี่ยนได้โดยใช้ฟังก์ชั่น alterColumnByDdl () ต่อไปนี้เป็นสคีมา `ฟังก์ชั่นสาธารณะ alterColumn ($ tableName, $ columnName, $ definition, $ flushData = false, $ schemaName = null);`
Rajput Praful

ฉันจะใช้ฟิลด์ 'custome_id' เป็นคีย์หลักได้อย่างไร อธิบายรหัส exanple
Suresh Chikani

คุณกรุณาเพิ่ม "วิธีที่เราสามารถปรับเปลี่ยนคอลัมน์ประเภทที่มีอยู่ได้อย่างไร" ในคำถามของคุณ?
Praput Rajput

3
@Keyur Shah คุณไม่จำเป็นต้องสร้างไฟล์ใหม่ M2 คุณต้องใส่รหัสต่อไปนี้ใน UpgradeSchema.php และอัปเดต setup_version ลงใน module.xml เช่นกัน if (version_compare ($ context-> getVersion (), '1.0.0') <0) {// you code} ถ้า (version_compare ($ context-> getVersion (), '1.0.1') <0) {/ / code ของคุณ}
Praput Rajput

2

ในการอัพเกรด Schema ของตัวติดตั้งคุณต้องเขียน 'UpgradeSchema.php'

ตัวอย่างของ UpgradeSchema.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: ในโมดูลของคุณคุณจะพบ module.xml ในโฟลเดอร์ etc ในไฟล์นั้นเปลี่ยนค่า setup_version (เช่น: 1.0.1 ถึง 1.0.2) ค่าเวอร์ชันควรสูงกว่าค่าเวอร์ชันปัจจุบัน

ขั้นตอนที่ 3: เรียกใช้การตั้งค่า php bin / magento: คำสั่งอัปเกรดจาก CLI

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