2014-10-18 34 views
5

Basit soru: Laravel için yeni.laravel migrasyon yabancı anahtarı eklemek için en iyi yol

Schema::create('lists', function(Blueprint $table) { 
    $table->increments('id'); 
    $table->string('title', 255); 
    $table->integer('user_id')->unsigned(); 
    $table->foreign('user_id')->references('id')->on('users'); 
    $table->timestamps(); 
}); 

Ben onDelete('cascade') eklemek güncellemek istiyorum: Bu göç dosyası var.

Bunu yapmanın en iyi yolu nedir?

$table->index('user_id'); 

Eğer basamaklandığında bir eylem ile yabancı anahtar oluşturabilirsiniz Bundan sonra:

$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 

Birlikte bunu yapmak istiyorsanız

cevap

7

Öncelikle size user_id alan bir dizin yapmak zorunda Yeni bir göç, önce endeksi ve yabancı anahtarı kaldırmalı ve her şeyi sıfırdan yapmalısınız.

$table->dropForeign('lists_user_id_foreign'); 
$table->dropIndex('lists_user_id_index'); 
$table->dropColumn('user_id'); 
2

Yeni göç dosyası en 'add_user_foreign_key.php'

diyelim oluşturmalısınız:

Aşağı taşındığında

() Eğer() ne yukarıda yazdım sonra do yukarı bunu yapmak zorunda ve işlev

public function up() 
{ 
    Schema::table('lists', function(Blueprint $table) 
    { 
     $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::table('lists', function(Blueprint $table) 
    { 
    $table->dropForeign('user_id'); // 
    }); 
} 

koşmak

php artisan migrate 
1
$table->integer('user_id')->unsigned(); 
$table->foreign('user_id')->references('id')->on('users'); 

Bu örnekte, user_id sütununun kimlik sütununa kullanıcılarının tablosuna başvurduğunu bildiriyoruz. İlk önce yabancı anahtar sütununu oluşturduğunuzdan emin olun! user_id sütununda, negatif değer bulunamadığından işaretsiz olarak bildirilir.

Ayrıca kısıtlaması "delete üzerine" ve "güncelleme üzerine" eylemler için seçenekler belirleyebilir:

$table->foreign('user_id') 
     ->references('id')->on('users') 
     ->onDelete('cascade'); 

yabancı anahtar bırakmak için size dropForeign yöntemini kullanabilir. Benzer bir adlandırma kuralı diğer endeksler için kullanılan yabancı anahtarları için kullanılır:

$table->dropForeign('posts_user_id_foreign'); 

sen oldukça yeni dokunaklı laravel ve , laracasts geçerli Laravel From Scratch serisini denemek edin. Yeni başlayanlar için harika bir rehber.

0

Eğer onDelete('cascade') eklemek sadece dizinleri bırakın ve onları tekrar oluşturmak isterseniz:

public function up() 
{ 
    Schema::table('lists', function($table) 
    { 
     $table->dropForeign('lists_user_id_foreign'); 

     $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); 
    }); 
} 

public function down() 
{ 
    Schema::table('lists', function($table) 
    { 
     $table->dropForeign('lists_user_id_foreign'); 

     $table->foreign('user_id')->references('id')->on('users'); 
    }); 
} 
İlgili konular