Sorun
Laravel geçişlerinize yeni sütunlar eklemek yaygın bir şeydir. Uygulamaların ölçeklenebilir olması amaçlanmıştır; bu, yeni özellikler eklemenin uygulamanızı daha da geliştireceği anlamına gelir.
Çok sık olarak, yeni Laravel geliştiricilerinin geçişlerini çalıştırmaları gerekir, ancak geçişlerin hiçbir şeyi bozmadan birden çok kez geri alınabileceğinden ve taşınabileceğinden emin olmazlar.
Odak noktamız bu olmasa da, sorunumuza geçmeden önce şunu belirtmenin önemli olduğunu düşünüyorum.
Aşağıdaki, yeni Laravel geliştiricilerinin mevcut bir tabloya yeni bir sütun eklemek istediklerinde yapmaya çalışacakları yaygın bir sorundur.
Yani bu noktada zaten şöyle bir şey yaptılar:
genel işlev yukarı()Schema::create('kuruluşlar', function ($tablo)
$table->increments('id');
$table->string('name')->nullable();
$table->text('about')->nullable();
);
Bu onlar için yeni bir tablo oluşturacak. Ve bunu temizlemek için, aşağı işlevini de eklemeli ve bu durumda tüm tablonuzu bırakmalısınız. Geçişinizi geri almak istediğinizde aşağı işlevi çalıştırılacaktır.
Tüm bunların üzerinden atlayarak, asıl sorun bir sütunu unuttuklarında ortaya çıkıyor ve daha sonra bunu eklemek istiyorlar, böylece yeni bir geçiş dosyası (sınıf) oluşturmak için şöyle bir şey çalıştırmayı deneyin:
genel işlev yukarı()Schema::create('kuruluşlar', function ($tablo)
$table->integer('size')->nullable();
);
Mevcut tabloya yeni bir sütun boyutu eklemeyi umuyorlar.
Şimdi ne olacağını ve bunun tekrar olmasını nasıl önleyebileceğimizi görelim.
Çözüm
Buradaki ana sorun, yeni geliştiricilerin genellikle, şemanın statik yöntem adı olan fark etmeyi gözden kaçırma eğiliminde olmasıdır . Create'i yalnızca başlangıçta tablonuzu oluştururken kullanırsınız. Tablonuzu herhangi bir zamanda daha fazla güncellemeniz gerekirse, bunun yerine tabloyu kullanmak istersiniz.
Yani gerçek yukarı işlevi şöyle olmalıdır:
genel işlev yukarı()Schema::table('kuruluşlar', function ($tablo)
$table->integer('size')->nullable();
);
Ve aşağı işlevi şöyle olurdu:
genel işlev aşağı()Schema::table('kuruluşlar', function($tablo)
$table->dropColumn('size');
);
Size kişisel önerim, yeni (değişen) geçiş dosyanızı oluşturduktan sonra aşağıdakileri yapmanızdır:
- Taşımayı çalıştırın
- Sütunun tabloya eklenip eklenmediğini kontrol edin
- php artisan move:rollback komutunu çalıştırarak geçişi geri alın
- Hiçbir şey olmayacağından emin ol
- Tüm geçiş döngüsünü kapatabildiğinizden emin olmak için 2. ve 3. adımı tekrarlayın
n
Başka bir ipucu
Dağıtımınızı otomatikleştirmek istiyorsanız ve komut dosyanızın bir geri alma çalıştırması gerekiyorsa, bu daha sonraki bir aşamada kullanışlı olacaktır.
Size verebileceğim bir diğer ipucu da sütununuzu nereye yerleştirmek istediğinizi planlamak. Sadece bunu yaparak, Laravel yeni sütununuzu en sona, muhtemelen update_at sütunundan sonra yerleştirecektir. (Çoğu tablo buna sahiptir)
Son kodunuz şöyle görünecek şekilde sonra bir yöntem kullanmak istiyorsunuz:
genel işlev yukarı()Schema::table('kuruluşlar', function ($tablo)
$table->integer('size')->after('name')->nullable();
);
Bu durumda, Laravel yeni sütununuzu isim sütununun hemen arkasına yerleştirecek, böylece güzel görünecek ve çok daha iyi organize edilecektir.