【发布时间】: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,谢谢我已经更改了执行顺序,现在我没有任何错误,非常感谢!