2016-11-14 71 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

大概有什么用表和sexe_id => 1产生此错误。在您的UsersTableSeeder而不是硬编码'sexe_id' => 1查询您的sexes表的任何行,并使用该动态id