я пытаюсь создать предварительный ключ между полем «identity» таблицы стажеров и полем «traine_identity» в таблице bookings, используя laravel 8

#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(); , чтобы сделать его также неподписанным