【发布时间】:2020-02-02 16:23:43
【问题描述】:
我现在的桌子是
Schema::create('students', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('first_name', 255);
$table->string('last_name', 255);
$table->enum('gender', ['m', 'f']);
$table->date('date_of_birth');
$table->integer('roll_number');
$table->char('section', 1);
$table->integer('class');
$table->unsignedBigInteger('school_id');
$table->string('photo')->nullable;
$table->timestamps();
$table->foreign('school_id')
->references('id')->on('schools')
->onUpdate('cascade')->onDelete('cascade');
$table->unique(['roll_number', 'section', 'class', 'school_id']);
});
标准
Schema::create('standards', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->unsignedBigInteger('school_id');
$table->timestamps();
$table->foreign('school_id')
->references('id')->on('schools')
->onUpdate('cascade')->onDelete('cascade');
});
部分
Schema::create('sections', function (Blueprint $table) {
$table->bigIncrements('id');
$table->char('name', 1);
$table->unsignedBigInteger('standard_id');
$table->timestamps();
$table->foreign('standard_id')
->references('id')->on('standards')
->onUpdate('cascade')->onDelete('cascade');
});
现在我有标准和部分表,这些表中的外键将替换现有结构中的类和部分列,并保持 roll_number、section_id、standard_id 和 school_id 的组合是唯一的。
我试过了
public function up()
{
Schema::table('students', function (Blueprint $table) {
$table->dropUnique(['roll_number', 'section', 'class', 'school_id']);
$table->dropColumn('section');
$table->dropColumn('class');
$table->unsignedBigInteger('standard_id')->after('roll_number');
$table->unsignedBigInteger('section_id')->after('standard_id');
$table->foreign('standard_id')->references('id')->on('standards')
->onUpdate('cascade')->onDelete('cascade');
$table->foreign('section_id')->references('id')->on('sections')
->onUpdate('cascade')->onDelete('cascade');
$table->unique(['roll_number', 'standard_id', 'section_id', 'school_id']); // unique combination
});
}
但它似乎不起作用。
错误
Illuminate\Database\QueryException : SQLSTATE[23000]: 完整性 违反约束:1452 无法添加或更新子行:外国 键约束失败(
myapp_extra.#sql-2f78_29d, CONSTRAINTstudents_standard_id_foreign外键 (standard_id) 参考 NCESstandards(id) ON DELETE CASCADE ON UPDATE CASCADE) (SQL: alter tablestudentsadd constraintstudents_standard_id_foreign删除时外键 (standard_id) 引用standards(id) 级联更新级联)at \myapp\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
注意:标准和部分表是在进行此迁移之前创建的,因此这两个列都可用。
【问题讨论】:
-
您遇到的错误是什么?
-
@SalmanZafar 请重新加载,我已经添加了错误。
-
您能提供
sections和standards架构吗? -
@MiladBarazandeh 请重新加载页面,我刚刚更新了它。
标签: php mysql laravel laravel-5.8 laravel-migrations