我的Laravel迁移有问题:(
当我正在运行php artisan migrate时,它会在外键上停止 .
第一次迁移
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::enableForeignKeyConstraints();
Schema::create('fichefrais', function (Blueprint $table) {
$table->char('idVisiteur', 4);
$table->foreign('idVisiteur')->references('id')->on('visiteur');
$table->char('mois',6);
$table->primary(['idVisiteur', 'mois']);
$table->integer('nbJustificatifs');
$table->decimal('montantValide', 10, 2);
$table->date('dateModif');
$table->char('idEtat', 2);
$table->foreign('idEtat')->references('id')->on('etat');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('fichefrais');
}
第二个
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::enableForeignKeyConstraints();
Schema::create('lignefraishorsforfait', function (Blueprint $table) {
$table->integer('id');
$table->primary('id');
$table->char('idVisiteur', 4);
$table->char('mois',6);
$table->foreign('idVisiteur')->references('idVisiteur')->on('fichefrais');
$table->foreign('mois')->references('mois')->on('fichefrais');
$table->char('libelle', 100);
$table->date('date');
$table->decimal('montant', 10, 2);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('lignefraishorsforfait');
}
运行命令后,我收到此错误:
[Illuminate \ Database \ QueryException] SQLSTATE [HY000]:常规错误:1005无法创建表gsb_larave . #sql-176_b9(错误号:150“外键约束形成错误”)(SQL:alter table lignefraishors forfait add constraint lignefraishorsforfait_mois_foreign外键(mois)在更新级联上删除级联时引用fichefrais(mois))[PDOException] SQLSTATE [HY000]:常规错误:1005无法创建表gsb_laravel . #sql-176_b9(错误:150“外键约束是错误形成“)
3 回答
您的 visiteur 表是否具有id作为主键?如果是,它是否 data type 具有 char 和 length 4 . ** lignefraishorsforfait **表中的 idVisiteur 具有char的数据类型,该数据类型必须与 visiteur 表中的主键相同 .
问题是你要声明的外键 doesn't refer to a primary key . 如果要为非主键创建外键,'fichefrais'表 must 中的列'mois'应为其上带有 unique constraint 的列
您正在使用MySQL,那么您的表是否在InnoDB引擎中定义? MyISAM不接受外键......