Laravel Migration: выдается ошибка, когда я хочу добавить внешний ключ - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь создать внешние ключи в Laravel, однако при переносе таблицы с использованием «artisan» выдается следующая ошибка, и я не знаю, почему:

Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1215 
Cannot add foreign key 
constraint (SQL: alter table `positions` add constraint 
`positions_car_id_foreign` 
foreign key (`car_id`) references `cars` (`id`))

Настольный автомобиль должен иметь уникальный идентификатор, и для каждого автомобиля есть много разных позиций (широта и долгота). Идентификатор автомобиля - это внешний ключ.

Файл миграции автомобиля:

class Car extends Migration
{
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('cars',function (Blueprint $table){
        $table->integer('id')->unique();
        $table->string('name');
        $table->string('location');
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('cars');
}
}

Файл миграции Postion:

 class Position extends Migration
 {
/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('positions',function (Blueprint $table){
        $table->engine = 'InnoDB';
        $table->timestamps();
        $table->integer('car_id')->unsigned();
        $table->double('latitude');
        $table->double('longitude');

    });

    Schema::table('positions',function (Blueprint $table) {
        $table->foreign('car_id')->references('id')->on('cars');
    });

}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('positions');
}

}

1 Ответ

0 голосов
/ 02 июля 2018

Вы определили отношение внешнего ключа с автомобилями как $table->integer('car_id')->unsigned()

Итак, ваш код миграции для поля id в таблице cars должен быть

$table->unsignedInteger('id')->unique() вместо $table->integer('id')->unique()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...