【问题标题】:Error: Foreign key constraint is incorrectly formed错误:外键约束的格式不正确
【发布时间】:2019-08-08 02:42:24
【问题描述】:

我的 HOOFDVRAAGS 数据库中有外键错误,但奇怪的是这与 VRAAGS 中的完全相同

SQLSTATE[HY000]:一般错误:1005 无法创建表 zonetoets.#sql-1 e8_2f9 (errno: 150 "外键约束为 格式不正确”)(SQL:一个过滤表hoofdvraags添加约束 hoofdvraags_toets_id_foreign 外键 (toets_id) 参考 toets (id) 删除级联)在 Connection.php 第 458 行:
SQLSTATE[HY000]:一般错误:1005 无法创建表 zonetoets.#sql-1 e8_2f9 (errno: 150 "外键约束为 格式不正确")

在此我的数据库迁移,希望有人可以帮助我。 特此关系 TOETS 1---->N HOOFDVRAAGS 1 ----> N VRAAGS

HOOFDVRAAGS

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateHoofdvraagsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('hoofdvraags', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('toets_id')->unsigned();
            $table->string('titel');
            $table->string('tekst');
            $table->string('bestandsnaam');
            $table->integer('volgnummerHoofdvraag')->default(99);             
            $table->timestamps();

            $table->foreign('toets_id')
                -> references('id')
                -> on('toets')
                -> onDelete('cascade');
        });
    }

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

TOETS

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateToetsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('toets', function (Blueprint $table) {
            $table->increments('id');
            $table->string('toetscode');
            $table->string('jaargang');
            $table->string('vak')->default('wiskunde');
            $table->string('hoofdstuk');
            $table->string('hoofdstuktitel');
            $table->string('maker');
            $table->string('datumgemaakt');   
            $table->integer('volgnummerToets')->default(1);     
            $table->timestamps();
        });
    }

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

VRAAG

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateSubvraagsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('subvraags', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('hoofdvraag_id')->unsigned();
            $table->string('vraag');
            $table->string('antwoord');
            $table->integer('punten');
            $table->string('bestandsnaam');
            $table->integer('volgnummerSubvraag')->default(1);
            $table->timestamps();

            $table->foreign('hoofdvraag_id')
                -> references('id')
                -> on('hoofdvraags')
                -> onDelete('cascade');
        });
    }

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

模特儿

public function hoofdvraag()
    {
        return $this->hasMany(Hoofdvraag::class);
    }

模型 HOOFDVRAAG

public function subvraag()
    {
        return $this->hasMany(Subvraag::class);
    }

    public function toets() {
        return $this->belongsTo(Toets::class);
    }

模型 SUBVRAAG

public function hoofdvraag() {
        return $this->belongsTo(Hoofdvraag::class);
    }

【问题讨论】:

  • 这可以是执行顺序吗?您需要确保创建toets,然后是hoofdvraags,然后是subvraags。您也可以对表名使用普通复数形式,只需在模型中定义 protected $table = 'hoodvragen';
  • Flame,谢谢我已经更改了执行顺序,现在我没有任何错误,非常感谢!

标签: mysql laravel


【解决方案1】:

据我所知,如果您要在模型中创建一个雄辩的关系,为什么要在迁移中创建外键,您只需为它创建一个列。

https://laravel.com/docs/5.8/eloquent-relationships#one-to-many

【讨论】:

  • 我是 Laravel 新手,我认为您可能是对的,但问题已为我解决,但稍后我会更好地查看。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-02-19
  • 2014-11-20
  • 1970-01-01
  • 2020-11-12
  • 2021-03-01
  • 2021-11-07
  • 2018-09-04
  • 2017-10-03
相关资源
最近更新 更多