【发布时间】:2017-08-16 13:58:57
【问题描述】:
我的 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');
}
运行命令后,我得到了这个错误:
[照亮\数据库\查询异常]
SQLSTATE[HY000]:一般错误:1005 无法创建表 gsb_larave.#sql-176_b9 (errno: 150 "外键约束是 格式不正确”)(SQL:alter table lignefraishors forfait 添加约束 lignefraishorsforfait_mois_foreign 外键 (mois) 在更新时删除级联引用 fichefrais (mois) 级联)[PDO异常]
SQLSTATE[HY000]:一般错误:1005 无法创建表 gsb_laravel.#sql-176_b9 (errno: 150 "外键约束是 格式不正确")
【问题讨论】:
-
问题可能是您在
fichefrais上有一个复合主键,并且您在lignefraishorsforfait上的两个不同的FK 上引用它。也许试试$table->foreign(array('idVisiteur', 'mois')->references(array('idVisiteur', 'mois')->on('fichefrais'); -
我以为是这样的,所以我尝试了你的解决方案,但我仍然有同样的错误。当我尝试使用 phpmyadmin 创建外键时,错误涉及列类型,但它是相同的
标签: laravel database-migration