2016-11-14 5 views
0

외래 키에 문제가 있습니다.Laravel "외래 키 제약 조건을 추가 할 수 없습니다"- 마이 그 레이션

내 마이그레이션 사용자 :

public function up() 
    { 
     Schema::create('users', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->string('nom'); 
      $table->string('prenom'); 
      $table->string('adresse'); 
      $table->integer('cp'); 
      $table->string('ville'); 
      $table->string('email')->unique(); 
      $table->string('password'); 
      $table->rememberToken(); 
      $table->timestamps(); 
      $table->tinyInteger('admin')->nullable(); 
     }); 

    Schema::table('users', function ($table) { 
     $table->integer('sexe_id')->unsigned(); 
     $table->foreign('sexe_id')->references('id')->on('sexes'); 
    }); 
} 

/** 
* Reverse the migrations. 
* 
* @return void 
*/ 
public function down() 
{ 
    Schema::drop('users'); 
}` 

내 sexe 마이그레이션 :

/** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('sexes', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('libelle'); 
      $table->timestamps(); 
     });  
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('sexes'); 
    } 

내 남녀 시더 :

class SexesTableSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     DB::table('sexes')->insert([ 
      [ 
       'libelle' => 'Homme', 
       'created_at' => date('Y-m-d H:i:s'), 
       'updated_at' => date('Y-m-d H:i:s'), 
      ], 
      [ 
       'libelle' => 'Femme', 
       'created_at' => date('Y-m-d H:i:s'), 
       'updated_at' => date('Y-m-d H:i:s'), 
      ] 
     ]);  
    } 
} 

내 사용자 시더 나는 성이있는 사용자가 :

class UsersTableSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     DB::table('users')->insert([ 
      [ 
       'name' => 'admin', 
       'nom' => 'Virlois', 
       'prenom' => 'Peter', 
       'sexe_id' => 1, 
       'email' => '[email protected]', 
       'adresse' => '12 rue Jean Rostand', 
       'cp' => 90000, 
       'ville' => 'Belfort', 
       'password' => bcrypt('admin123'), 
       'created_at' => date('Y-m-d H:i:s'), 
       'updated_at' => date('Y-m-d H:i:s'), 
       'admin' => 1, 
      ], 
      [ 
       'name' => 'test', 
       'nom' => 'Mennegain', 
       'prenom' => 'Mathieu', 
       'sexe_id' => 1, 
       'email' => '[email protected]', 
       'adresse' => '12 rue Jean Rostand', 
       'cp' => 90000, 
       'ville' => 'Belfort', 
       'password' => bcrypt('test123'), 
       'created_at' => date('Y-m-d H:i:s'), 
       'updated_at' => date('Y-m-d H:i:s'), 
       'admin' => 0, 
      ] 
     ]); 
    } 
} 
내 데이터베이스 시더 : 나는 실행하면

class DatabaseSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     $this->call(SexesTableSeeder::class); 
     $this->call(UsersTableSeeder::class); 
     $this->call(SaisonTableSeeder::class); 
     $this->call(ProduitTypeSeeder::class); 
     $this->call(SportsTableSeeder::class); 
     $this->call(ProduitsTableSeeder::class); 
    } 
} 

가 : PHP는 장인 마이그레이션이 : 새로 고침 -seed

이 오류가 있습니다

[Illuminate\Database\QueryException]           
    SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL 
    : alter table `users` add constraint `users_sexe_id_foreign` foreign key (` 
    sexe_id`) references `sexes` (`id`))           



    [PDOException]               
    SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint 
+0

데이터베이스 엔진이'InnoDB'인지 확인하십시오. MyISAM은 외래 키를 지원하지 않습니다. – shoieb0101

답변

1

마이그레이션 순서는 매우 중요합니다. 게시 한 항목에서 먼저 사용자 마이그레이션을 실행하고 동일한 마이그레이션에서 사용자 테이블을 만들고 테이블을 변경하려고합니다. 다른 테이블 sexes은 존재하지 않습니다

($table->foreign('sexe_id')->references('id')->on('sexes');) 

그래서 오류가 발생합니다.

사용자, 성별, 사용자 또는 성별을 변경하고 사용자를 변경하고 동일한 마이그레이션에서 변경하기 위해 마이그레이션을 분리하는 것이 좋지만, 이는 좋은 방법이 아닙니다. 마이그레이션을 혼합하고 변경하십시오.).

+0

고맙습니다, 지금 작동합니다 :) –

0

은 아마 id 1에 아무것도 없습니다를 sexes 테이블 및 sexe_id => 1이 오류를 생성합니다. 'sexe_id' => 1을 하드 코딩하지 말고 UsersTableSeeder에서 어떤 행에 대해서도 sexes 테이블을 쿼리하고 그 동적 인 id을 사용하십시오.