#laravel #foreign-keys #database-migration #laravel-8
#laravel #внешние ключи #миграция базы данных #laravel-8
Вопрос:
Таблица стажеров :
Schema::create('trainees', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email');
$table->string('password');
$table->string('telephone');
$table->string('address');
$table->integer('identity')->unique();
$table->timestamps();
});
Таблица бронирования :
Schema::create('bookings', function (Blueprint $table) {
$table->increments('id');
$table->integer('course_id')->unsigned();
$table->foreign('course_id')->references('id')->on('courses');
$table->integer('trainee_identity')->unsigned();
$table->foreign('trainee_identity')->references('identity')->on('trainees');
$table->string('payed')->default('0');
$table->timestamps();
});
Получение этой ошибки при миграции:
SQLSTATE[HY000]: Общая ошибка: 3780 Ссылочный столбец ‘traine_identity’ и ссылочный столбец ‘identity’ в ограничении внешнего ключа ‘bookings_traine_identity_ foreign’ несовместимы. (SQL: alter table bookings
добавить bookings_trainee_identity_foreign
ссылки на внешний ключ ограничения trainee_identity
( trainees
identity
))
Ответ №1:
Вы ссылаетесь на целое число со знаком в целом числе без знака.
В trainees
таблице $table->integer('identity')->unique();
подписано, а в bookings
таблице $table->integer('trainee_identity')->unsigned();
без знака.
Оба должны быть одного типа, чтобы это работало.
Вы можете изменить $table->integer('identity')->unique();
$table->unsignedInteger('identity')->unique();
, чтобы сделать его также неподписанным