首页 文章

无法通过laravel迁移创建外键

提问于
浏览
0

我的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 回答

  • 0

    您的 visiteur 表是否具有id作为主键?如果是,它是否 data type 具有 charlength 4 . ** lignefraishorsforfait **表中的 idVisiteur 具有char的数据类型,该数据类型必须与 visiteur 表中的主键相同 .

  • -1

    问题是你要声明的外键 doesn't refer to a primary key . 如果要为非主键创建外键,'fichefrais'表 must 中的列'mois'应为其上带有 unique constraint 的列

  • 0

    您正在使用MySQL,那么您的表是否在InnoDB引擎中定义? MyISAM不接受外键......

相关问题