Laravel geçişinde sütunu null yapılamaz hale getirme


129

nullableŞu anda bir tabloda belirli sütunları yapmak için bir geçiş yazıyorum . Aşağı işlevi için elbette bu sütunları not nullableyeniden yapmak istiyorum . Şema oluşturucu belgelerine baktım , ancak bunu yapmanın bir yolunu bulamadım.

Herhangi bir yardım memnuniyetle karşılanacaktır.


1
bu sorunun en eksiksiz cevabı burada bulunabilir: stackoverflow.com/a/32568625/4908847
szaman

Yanıtlar:


233

Laravel 5'ten önce, şema oluşturucuyu kullanarak mevcut bir tablo sütununu değiştirmenin Laravel yerel bir yolu yoktu. Bunun için ham sorgular kullanmanız gerekir.

Ancak Laravel 5'ten itibaren şunları kullanabilirsiniz:

$table->...->nullable(false)->change();

1
Ben de bunu buldum. Şema oluşturucunun desteklemediği görünen sütun tanımlarının değiştirilmesine izin vermesi hoş bir dokunuş olacaktır. Sadece sıfırdan tablolar oluşturmakla kalmayıp, mevcut bir DB'yi değiştirmek için şema oluşturucuyu kullanan benim gibi birçok kişi olduğundan eminim.
Sean the Bean

3
Taylor Otwell (Laravel'in yaratıcısı) 6 gün önce (2014-05-09) şöyle demişti: "Biri başarılı ve temiz bir şekilde yapabilirse, onu birleştireceğim şeklindeki ifademin arkasında duruyorum." github.com/laravel/framework/issues/895#issuecomment-42709756
Ryan

3
@Musa Görünüşe göre boş değer atanabilir bir sütun ayarlayabilirsin (örn:) $table->string('colmn', 255)->nullable()->change();ama tersi işe yaramıyor ( $table->string('colmn', 255)->change();), bu yüzden bunun için hala ham db sorguları kullanman gerekiyor
Luís Cruz

5
@ MattMcDonald'ın aşağıdaki cevabına bakın. Bir geçişte null yapılabilir değil yapmak için nullable () nullable ve nullable (false) yapmak için kullanabilirsiniz.
ajon

6
nullable(false)benim için çalışmıyor Laravel 5.3 :(
Stalinko

38

Laravel 5 itibariyle, bunu yerel olarak tersine çevirmek mümkündür - basitçe nullable () 'a argüman olarak false iletin.

Örneğin

$table -> string('foo') -> nullable(false) -> change();

İşe yarıyor! Yani Laravel'deki güncellemeler nedeniyle bu doğru cevap haline geldi.
jlbang

Teşekkürler, sütunların neden varsayılan olarak null yapılamaz hale getirilmediğini anlamıyorum. Genellikle en iyi uygulamadır ve bu, koda çok fazla gürültü ekler.
Morgan

1
Sütunlar varsayılan olarak boş değildir. Poster sadece zaten boş olan bir sütunun nasıl tersine çevrileceğini soruyordu.
Matt McDonald

3

Önce şunu çalıştırın:

composer require doctrine/dbal

Ardından tabloyu bu şekilde değiştirecek bir geçiş oluşturun:

php artisan make:migration fix_whatever_table_name_here

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->nullable(false)->change();
    });
}

public function down()
{
    Schema::table('table_name', function ($table) {
        $table->dropColumn('column');
    });
}

4
Tüm sütunu geri alma rutinine bırakmanın bir nedeni var mı? Down () yöntemi, geriye ve ileriye doğru yuvarlanan geçişleri desteklemek için up () yönteminin mantığını geri almalıdır.
Andrew

2

Sütunu -> nullable () olmadan tekrar bildirebilir ve -> değiştir kullanabilirsiniz

public function up()
{
    Schema::table('table_name', function (Blueprint $table) {
        $table->type('column')->change();
    });
}

public function down()
{
    Schema::table('table_name', function ($table) {
        $table->type('column')->nullable()->change();
    });
}
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.