这是问题所在。我现在正在敲打几个小时。 Laravel不允许我拥有主键(它说多个,但你可以看到它只有一个)。而且因为教师表中的主键存在问题。我无法在课程表中将其用作外键。
教师表的迁移文件
class CreateTeachersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('teachers', function (Blueprint $table) {
$table->increments('teacher_id')->primary();
$table->string('email', 200);
$table->string('first_name',300)->nullable();
$table->string('last_name',300)->nullable();
$table->string('account_status',50)->default('inactive');
$table->string('subscription_status',50);
$table->string('account_reset_code',400)->nullable();
$table->string('passkey',500);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('teachers');
}
}
课程表的迁移文件
class CreateCoursesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('courses', function (Blueprint $table) {
$table->increments('course_id')->primary();
$table->integer('teacher_id_fr');
$table->string('course_name', 500);
$table->string('course_code',300);
$table->string('subject_area',300);
$table->string('course_level',100);;
$table->string('grade_periods',100);
$table->timestamps();
});
Schema::table('courses',function(Blueprint $table){
$table->foreign('teacher_id_fr')->references('teacher_id')->on('teachers')->onDelete('cascade')->onUpdate('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('courses');
}
}
有关迁移的问题
语法错误或访问冲突。 1068找到多个主键
我现在尝试过的事情
1)使用无符号方法使主列无符号。
2)使用表的InnnoDB引擎类型。
3)以及论坛上类似帖子所建议的其他许多内容,但似乎对我没什么用。
修改
我已经从$ table-> increments(' teacher_id')中删除了两个文件中的primary()方法。据说这是Laravel标记自动增加列作为主键。
但是现在错误就在课程表上。
常规错误:1215无法添加外键约束
答案 0 :(得分:0)
您可以在迁移文件中定义Multiple primanry密钥,如下所示:
$table->primary(array('field_name1', 'field_name2'));
答案 1 :(得分:0)
尝试替换此内容,移除primary()
,increments
自动创建primary
$table->increments('teacher_id')->primary();
到
$table->increments('teacher_id');
对于新错误,请尝试此General error : 1215 cannot add foreign key constraint
public function up()
{
Schema::create('courses', function (Blueprint $table) {
$table->increments('course_id');
$table->integer('teacher_id_fr');
$table->string('course_name', 500);
$table->string('course_code',300);
$table->string('subject_area',300);
$table->string('course_level',100);;
$table->string('grade_periods',100);
$table->timestamps();
$table->foreign('teacher_id_fr')
->references('teacher_id')->on('teachers')
->onDelete('cascade')
->onUpdate('cascade');
});
}
答案 2 :(得分:0)
我能够通过一分钟的改变来解决这个问题。我修改了下面的课程迁移文件,它就像一个魅力
$table -> integer('teacher_id_fr') -> unsigned();
<强>原因强>
实际上,引用和引用列(本例中为teacher.teacher_id和course.teacher_id_fr)必须属于同一类型。
话虽如此,Laravel将自动增量列标记为“主要”和无符号类型。因此,请确保更改foregin键列以匹配主键的类型,即unsigned。以上修改的内容。
希望它澄清问题和解决方案。如果您还有其他想法。请在这里试一试。
快乐学习!