Magento2 InstallSchema menambahkan kolom baru ke tabel yang ada


11

Saya mencoba menambahkan kolom baru ke tabel yang ada di 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();
    }
}

setup php bin / magento: tingkatkan

Tidak ada yang terjadi

Pembaruan 1.

Jika saya memahami tujuan dengan jelas, InstallSchema dijalankan hanya ketika tidak ada nilai di tabel pengaturan. Jika modul Anda sudah diinstal di sistem - Anda perlu melakukan perubahan apa pun di UpgradeSchema. Itu karena file saya tidak dieksekusi. Ketika saya menamainya untuk meningkatkan dan membuat perubahan yang diperlukan - semuanya mulai berfungsi dengan baik

Jawaban:


7

Pertama, saya berasumsi ketika Anda mengatakan bahwa tidak ada yang terjadi, maksud Anda skrip pengaturan berjalan seperti biasa, tetapi tidak ada kesalahan yang dihasilkan dan tidak ada perubahan yang dilakukan pada database Anda. Jika ini bukan asumsi yang benar, beri tahu saya!

Ketika saya melakukan upgrade ke skema, saya tidak melakukan getTable(), saya pikir itu berlebihan.

Saya menguji skrip di atas dengan perubahan itu, dan itu berhasil, jadi dua langkah pemecahan masalah yang akan saya ambil adalah:

  1. Pastikan Anda telah menambahkan di setup_versiondalam module.xml(atau skrip Anda tidak akan berjalan sama sekali)
  2. Tambahkan beberapa kesalahan yang jelas dalam skrip upgrade Anda untuk melihat apakah skrip berjalan sama sekali ... jika ada kesalahan dan skrip berjalan, Anda akan mendapatkan pesan kesalahan saat menjalankan setup:upgrade

Saya harap itu membantu!


1
Terima kasih atas tanggapan Anda. Jika saya memahami tujuan dengan jelas, InstallSchema dijalankan hanya ketika tidak ada nilai di tabel pengaturan. Jika modul Anda sudah diinstal di sistem - Anda perlu melakukan perubahan apa pun di UpgradeSchema. Itu karena file saya tidak dieksekusi. Ketika saya mengganti nama untuk meningkatkan dan membuat perubahan yang diperlukan - semuanya mulai berfungsi dengan baik
zhartaunik

Maaf, itu 100% benar, langkah 1 seharusnya menghapus entri dari tabel setup_module atau menjadikannya skrip pemutakhiran. Saya senang ini bekerja untuk Anda!
Yer

0

Hapus entri modul dari tabel 'setup_module' lalu jalankan perintah php bin / magento setup: upgrade. Itu akan berhasil.


0

Anda dapat membuat skrip dan di folder dbscripts Anda dan menjalankan file ini dari terminal atau browser web.

mis. simpan file dalam pub/dbscripts/filename.phptempel kode ini dan ubah sesuai kebutuhan Anda

<?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";

jalankan file ini dari browser seperti

domain.name/pub/dbscripts/filename.php
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.