Migration kullanarak laravel'deki sütunu nasıl yeniden adlandırabilirim?


92

Aşağıda belirtildiği gibi sütunlarım var:

public function up()
{
    Schema::create('stnk', function(Blueprint $table)
    {
        $table->increments('id');
        $table->string('no_reg', 50)->unique();
        $table->string('no_bpkb', 50)->unique();
        $table->string('nama_pemilik', 100);
        $table->string('alamat');
        $table->string('merk', 50);
        $table->string('tipe', 50);
        $table->string('jenis', 50);
        $table->smallInteger('tahun_pembuatan');
        $table->smallInteger('tahun_registrasi');
        $table->smallInteger('isi_silinder');
        $table->string('no_rangka', 50);
        $table->string('no_mesin', 50);
        $table->string('warna', 50);
        $table->string('bahan_bakar', 50);
        $table->string('warna_tnkb', 50);
        $table->string('kode_lokasi', 50);
        $table->date('berlaku_sampai');
        $table->timestamps();

        $table->index('created_at');
        $table->index('updated_at');
    });

}

Stnk masasına ekme makinesi yaptım

Şimdi adlandırmak istediğiniz idiçin id_stnk.
Bir ekledik "doktrini / DBal" in "besteci" ve yapmak composer update.

Göç yaptım php artisan migration:make rename_column.
Sonra rename_column için yeni bir yöntem ekledim:

Schema::table('stnk', function(Blueprint $table)
{
    $table->renameColumn('id', 'id_stnk');

});

Ve sonra komutu çalıştırmayı denedim php artisan migrateama aşağıda belirtildiği gibi hata aldım:

[Ulluminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1025 Error on rename of './my_database/#sql -447_33' to './my_database/stnk' (error: 150) (SQL: ALTER TABLE stnk CHANGE id id_stnk INT UNSIGENED AUTO_INCREMENT NOT NULL)

[PDOException]
SQLSTATE[HY000]: General error: 1025  Error on rename  of './my_database/#sql -447_33' to './my_database/stnk' (error: 150)

Yanıtlar:


120

Başka bir taşıma dosyası oluşturmanız ve oraya yerleştirmeniz gerekir:

Çalıştırmak

Laravel 4:    php artisan migrate:make rename_stnk_column
Laravel 5:    php artisan make:migration rename_stnk_column

Ardından, yeni taşıma dosyası yerine:

class RenameStnkColumn extends Migration
{

    public function up()
    {
        Schema::table('stnk', function(Blueprint $table) {
            $table->renameColumn('id', 'id_stnk');
        });
    }


    public function down()
    {
        Schema::table('stnk', function(Blueprint $table) {
            $table->renameColumn('id_stnk', 'id');
        });
    }

}

Yukarıdaki sorumu düzenledim, şimdi bak .. gitbash'de hata mesajı var
Ariasa

Hata 150 bir yabancı anahtar kısıtlamasıdır. Bu başvuru, diğer tabloları var demektir idüzerinde stnkmasaya.
Laurence

3
Laravel 5 için make:migrationnot şimdi ve değilmigrate:make
Jason

9
Ayrıca sütun yeniden adlandırmanın işe yaraması için, L5'te kaldırılmış bir pakete ihtiyaç duymanız gerekir. Bu "doctrine/dbal": "~2.3"olmadan bazı çok belirsiz hatalar alırsınız. Burada bir hata olarak ortaya çıktı github.com/laravel/framework/issues/3116 ve buradaki dokümantasyonda tartışmasız daha az yararlı bir söz ile laravel.com/docs/5.0/schema#renaming-columns
Jason

Taşıma işlemi tamamlandıktan sonra, dosya silinmeli ve orijinal oluşturma şeması güncellenmeli mi? Sadece işleri nasıl temiz tutacağımı soruyorum
orbitory

30

Yapmanız gereken ilk şey, geçiş dosyanızı oluşturmaktır.

Komut satırınızı yazın

php artisan make:migration rename_stk_column --table="YOUR TABLE" --create

Dosyayı oluşturduktan sonra. Veritabanı / geçişler altındaki uygulama klasörünüzde yeni oluşturulan taşıma dosyasını açın.

Yukarı yönteminize şunu ekleyin:

Schema::table('stnk', function(Blueprint $table)
    {
        $table->renameColumn('id', 'id_stnk');
    });
}

ve aşağı yönteminizde:

    Schema::table('stnk', function(Blueprint $table)
    {
        $table->renameColumn('id_stnk', 'id);
    });
}

sonra komut satırınıza yazın

php artisan migrate

O zaman wollah! id'yi id_stnk olarak yeniden adlandırdınız. BTW kullanabilirsiniz

php artisan migrate:rollback

değişiklikleri geri almak için. İyi şanslar


Yukarıdaki sorumu düzenledim, şimdi bak .. gitbash'ta hata mesajı var
Ariasa

1
Doctrine / dbal bağımlılığını composer.json dosyanıza eklediğinizden emin olun.
Ben

19

Sütun taşıma dosyasını yeniden adlandırmak için sırasıyla aşağıdaki adımları izleyin.

1- Projenizde Doctrine / dbal kütüphanesi var mı? Önce komutu çalıştırmadıysanız

composer require doctrine/dbal

2- Eski taşıma dosyasını güncellemek için güncelleme taşıma dosyası oluşturun. Uyarı (aynı ada sahip olması gerekir)

php artisan make:migration update_oldFileName_table

örneğin eski taşıma dosyamın adı: create_users_table güncelleme dosyası adı şu olmalıdır: update_users_table

3- update_oldNameFile_table.php

Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});

'eski sütun adımdan' ve 'yeni sütun adıma'

4- Son olarak migrate komutunu çalıştırın

php artisan migrate

Kaynak bağlantısı: laravel belgesi


14

Sütunları Yeniden Adlandırma (Laravel 5.x)

Bir sütunu yeniden adlandırmak için, Şema oluşturucudaki renameColumn yöntemini kullanabilirsiniz. * Bir sütunu yeniden adlandırmadan önce, doktrini / dbal'ı eklediğinizden emin olun. bağımlılığını composer.json dosyanıza . *

Veya composer'ı kullanarak paketi isteyebilirsiniz ...

composer require doctrine/dbal

Kaynak: https://laravel.com/docs/5.0/schema#renaming-columns

Not: make: migration kullanın ve migrate değil : make for Laravel 5.x


Düzenlemeye çalıştığınız tabloda herhangi bir sütunu ENUM olarak kullanmayın. Doctrine / dbal bunun ne olduğunu bilmiyor ..... Başlangıçta orijinal geçişi doğru isim olacak şekilde değiştirmek ve tüm veritabanını sıfırlamak zorunda kaldım. Şanslıyım ki hala geliştirme aşamasındaydım. Laravel & Co'nun bunu besteciye en baştan bağımlı hale getirmesine rağmen?
mikoop

@mikoop Bu, çerçevenin önceki sürümlerinde başlangıçtan beri bir bağımlılıktı. Ancak bu bağımlılık çok ağırdır ve yaygın olarak kullanılmamaktadır. Yani kaldırıldı. (Özet budur; karardan önce pek çok tartışma yaşandı. Aslında topluluk onun kaldırılmasını istedi ve duyuldu.)
J. Bruni

renameColumn, doktrinde kullanımdan kaldırılmış ve şu anda kaldırılmıştır.
Sander Visser

10

Yanıtların hiçbiri işe yaramadığı için 0,02 dolarımı buraya atmak, ancak beni doğru yola yönlendirdi. Olan şey, önceki bir yabancı kısıtlamanın hatayı atmasıydı. Düşündüğün zaman apaçık ortada.

Bu nedenle, yeni geçiş upyönteminizde, önce o orijinal kısıtlamayı bırakın, sütunu yeniden adlandırın, ardından yeni sütun adıyla yeniden kısıtlamayı ekleyin. Gelen downgeri satılan ayara olacak şekilde yöntemin, sen tam tersini yapmak.

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::table('proxy4s', function (Blueprint $table) {
        // Drop it
        $table->dropForeign(['server_id']);

        // Rename
        $table->renameColumn('server_id', 'linux_server_id');

        // Add it
        $table->foreign('linux_server_id')->references('id')->on('linux_servers');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::table('proxy4s', function (Blueprint $table) {
        // Drop it
        $table->dropForeign(['linux_server_id']);

        // Rename
        $table->renameColumn('linux_server_id', 'server_id');

        // Add it
        $table->foreign('server_id')->references('id')->on('linux_servers');
    });
}

Umarım bu, gelecekte birine biraz zaman kazandırır!


1

Yukarıdaki cevap harika veya size zarar vermeyecekse, taşımayı geri alın ve adı değiştirin ve taşımayı tekrar çalıştırın.

 php artisan migrate:rollback

Yukarıdaki sorumu düzenledim, şimdi bak .. gitbash'ta hata mesajı var
Ariasa
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.