Magento2 InstallSchema mevcut tabloya yeni sütun ekle


11

Magento2'deki mevcut tabloya yeni sütun eklemeye çalışıyorum

<?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 bin / magento kurulumu: yükseltme

Hiçbir şey olmuyor

Upd 1.

Hedefi açıkça anlarsam, InstallSchema yalnızca kurulum tablosunda hiç değer olmadığında yürütülür. Modülünüz sistemde zaten kurulu ise, UpgradeSchema'da herhangi bir değişiklik yapmanız gerekir. Çünkü dosyam yürütülmedi. Yükseltmek ve gerekli değişiklikleri yapmak için yeniden adlandırdığımda - her şey düzgün çalışmaya başladı

Yanıtlar:


7

İlk olarak, hiçbir şey olmadığını söylediğimde, kurulum komut dosyasının her zamanki gibi çalıştığını, ancak hiçbir hata çıkmadığını ve veritabanınızda hiçbir değişiklik yapılmadığını kastediyorum. Bu doğru bir varsayım değilse, lütfen bana bildirin!

Şemaya yükseltme yaptığımda, bir şey yapmıyorum getTable(), bunun gereksiz olduğunu düşünüyorum.

Yukarıdaki komut dosyasını bu değişiklikle test ettim ve işe yaradı, böylece alacağım iki sorun giderme adımı:

  1. setup_versionAlanınızdaki değerini artırdığınızdan emin olun module.xml(veya komut dosyanız hiç çalışmaz)
  2. Hiç çalışıp çalışmadığını görmek için yükseltme komut dosyanıza bariz bir hata ekleyin ... bir hata varsa ve komut dosyası çalışıyorsa, çalışırken hata mesajları alırsınız setup:upgrade

Umarım bu yardımcı olur!


1
Cevabınız için teşekkürler. Hedefi açıkça anlarsam, InstallSchema yalnızca kurulum tablosunda hiç değer olmadığında yürütülür. Modülünüz sistemde zaten kurulu ise, UpgradeSchema'da herhangi bir değişiklik yapmanız gerekir. Çünkü dosyam yürütülmedi. Yükseltmek ve gerekli değişiklikleri yapmak için yeniden adlandırdığımda - her şey düzgün çalışmaya başladı
zhartaunik

Üzgünüm, bu% 100 doğrudur, adım 1 girdiyi setup_module tablosundan silmek veya yükseltme komut dosyası yapmak olmalıdır. Sizin için çalıştığına sevindim!
Jer_

0

Modül girişini 'setup_module' tablosundan silin ve php bin / magento setup: upgrade komutunu çalıştırın. Çalışacak.


0

bir komut dosyası oluşturabilir ve dbscripts klasöründe bu dosyayı terminalden veya web tarayıcısından çalıştırabilirsiniz.

örneğin pub/dbscripts/filename.phpbu kodu yapıştırın dosyaya kaydedin ve ihtiyacınıza göre değiştirin

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

bu dosyayı tarayıcıdan çalıştır

domain.name/pub/dbscripts/filename.php
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.