2014-10-18 2 views
5

간단한 질문 : 저는 Laravel을 처음 접했습니다.laravel migration 외래 키를 추가하는 가장 좋은 방법

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

내가 onDelete('cascade')을 추가하여 업데이트 할 :이 마이그레이션 파일이 있습니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

$table->index('user_id'); 

당신이 폭포에 대한 작업과 외래 키 생성 할 수 있습니다 그 후 :

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

것은 당신이 그렇게 할 경우를

답변

7

은 첫째로 당신은 당신의 user_id 필드 인덱스를 확인해야합니다 새로운 마이 그 레이션, 당신은 인덱스와 외래 키를 먼저 제거하고 모든 것을 처음부터해야합니다.

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

당신은 새로운 마이그레이션 파일의이 'add_user_foreign_key.php'

을 가정 해 봅시다 만들어야합니다

아래에

는()는() 제가 위에 쓴 적이 않는 그때까지이 작업을 수행해야하고 기능

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'); // 
    }); 
} 

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

이 예에서는 user_id 열이 id사용자 테이블을 참조합니다. 먼저 외래 키 열을 만들어야합니다! user_id 열은 음수 값을 가질 수 없으므로 부호가없는 것으로 선언됩니다.

또한 제약의 "삭제에"와 "업데이트에 대한"행동에 대한 옵션을 지정할 수 있습니다

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

가 외부 키를 삭제하려면, 당신은 dropForeign 방법을 사용할 수 있습니다. 비슷한 이름 지정 규칙은 다른 인덱스에 대해 사용되는 외부 키에 사용되는 :

$table->dropForeign('posts_user_id_foreign'); 

당신은 상당히 새로운 웅변 Laravel , laracasts에서 사용할 수있는 Laravel From Scratch 시리즈를 시도하는 경우. 그것은 초보자를위한 훌륭한 가이드입니다.

0

당신은 onDelete('cascade')를 추가 단지 인덱스를 삭제하고 다시 만들려면 :

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'); 
    }); 
} 
관련 문제