Magento2: Veritabanı şeması yükseltmesi nasıl yapılır


29

Magento özel modül üzerinde çalışıyorum, modülde önceden Setup\InstallSchema.phpkurulmuş bir dosya var . Daha fazla veritabanı alanı ekledim, InstallSchema.phpböylece tablo yapısını güncellemek istiyorum ancak tablo herhangi bir değişiklik yapmadı.

Şema değişikliklerini veritabanı tablosuna nasıl uygulayabilirim?

Şemayı güncellemek için işlem cli komutları var ancak başarıya ulaşamadım.

php bin/magento setup:db-schema:upgrade

ve

php bin/magento setup:upgrade

"Php bin / magento module: uninstall" ile kaldırabilir ve uzantınızı tekrar yükleyebilirsiniz. UpgradeSchema.php github.com/magento/magento2/commit/… gibi olduğunu kontrol etmek için başka bir nokta gibi görünüyor Burada şu anda burada veri tabanını yükseltmek için net bir açıklama değil, bu yüzden burada yanıtı düzeltmek için sabırsızlanıyorum
FireBear

@FireBear cevap kodu altında appy?
Suresh Chikani

henüz denemedim, ancak Katalog çekirdek modülündeki örneğe
FireBear 12:15

Çoğu zaman, hata sınıf için tanımlanmış bir ad alanına sahip olmamaktan kaynaklanır. Sınıfınız için bir ad alanı tanımladığınızı kontrol edin.
soukaina

Yanıtlar:


48

Modülünüzün mevcut tablosuna daha fazla sütun eklemek istiyorsanız aşağıdakileri yapabilirsiniz.

Adım 1: Kurulum klasörü altında UpgradeSchema.php oluşturun. Aşağıdaki kodu Fikir al.

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();
    }
}

Adım 2: içindeki setup_versiondeğeri değiştirinmodule.xml

Adım 3: CLI'den php bin/magento setup:upgradekomutu çalıştır


1
yükseltme komut dosyasını kullanarak birincil anahtarı nasıl ekleyebileceğimi açıklayabilir misiniz? Masamda 'customer_id' var, ancak birincil anahtar değil, şimdi birincil anahtar olarak eklemek istiyorum.
Suresh Chikani

Evet, configureColumnByDdl () işlevini kullanarak değiştirebilirsiniz. Şema aşağıdadır. `public function changeColumn ($ tableName, $ columnName, $ tanım, $ flushData = false, $ schemaName = null);`
Praful Rajput

'Custome_id' alanını birincil anahtar olarak nasıl uygulayabilirim? exanple kodunu açıklar.
Suresh Chikani

Lütfen "Mevcut sütun türünü nasıl değiştirebiliriz?" Ekleyebilir misiniz? Sorunuzda
Praful Rajput

3
@Keyur Şah, yeni bir M2 dosyası oluşturmanıza gerek yok. UpgradeSchema.php içine aşağıdaki kodu koymanız ve setup_version'ı module.xml dosyasına güncellemeniz gerekir. if (version_compare ($ context-> getVersion (), '1.0.0') <0) {// kodlarsanız} if (version_compare ($ context-> getVersion (), '1.0.1') <0) {/ / Kodunuz}
Praful Rajput 12:15

2

Installer Schema’i yükseltmek için 'UpgradeSchema.php' yazmanız gerekir.

UpgradeSchema.php örneği:

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();
}
}

Adım 2: Modülünüzdeki module.xml dosyasını etc klasörünün içinde bulacağınız dosya değişikliği setup_version değeri (örneğin: 1.0.1 - 1.0.2) sürüm değeri geçerli sürüm değerinden yüksek olmalıdır.

Adım 3: php bin / magento kurulumunu çalıştırın: CLI'den yükseltme komutu

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.