Моя нынешняя таблица
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
});
}
, нопохоже, что он не работает.
Ошибка
Подсветка \ База данных \ QueryException: SQLSTATE [23000]: Нарушение ограничения целостности: 1452 Невозможно добавить или обновитьдочерняя строка: сбой ограничения внешнего ключа (myapp_extra
. #sql-2f78_29d
, CONSTRAINT students_standard_id_foreign
ИНОСТРАННЫЙ КЛЮЧ (standard_id
) ОБРАТНАЯ СВЯЗЬ standards
(id
) НА УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИЕ КАСКАД) (SQL: изменить таблицуstudents
добавить ограничение students_standard_id_foreign
ссылки на внешний ключ (standard_id
) standards
(id
) при удалении каскада при обновлении каскада)
at \myapp\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
Примечание : таблица стандартов и разделов создается до выполнения этой миграции, поэтому доступны оба столбца.