Невозможно добавить ограничение внешнего ключа в Laravel - PullRequest
0 голосов
/ 02 июля 2019

У меня есть приложение, в котором пользователи принадлежат команде.Вот мой тест:

/** @test */
public function it_has_many_users()
{
    $team = factory(Team::class)->create();
    $users = factory(User::class, 3)->create([
        'team_id' => $team->getKey(),
    ]);

    $this->assertEquals(3, $team->users->count());
}

У меня есть настройка внешнего ключа в таблице пользователей, например, так:

Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('team_id')->nullable();

        $table->foreign('team_id')
            ->references('id')
            ->on('teams')
            ->onUpdate('cascade')
            ->onDelete('cascade');
    });

Существует еще кое-что для миграции, но для простоты я включил тольконеобходимый код.Вот моя teams миграция:

Schema::create('teams', function (Blueprint $table) {
    $table->bigIncrements('id');
});

Когда я запускаю свой тест, я получаю эту ошибку:

Подсветка \ База данных \ QueryException: SQLSTATE [HY000]: Общая ошибка:1215 Невозможно добавить ограничение внешнего ключа (SQL: изменить таблицу users добавить ограничение users_team_id_foreign ссылки на внешний ключ (team_id) teams (id) при каскаде удаления при каскаде обновлений)

Я не уверен, что не так, так как у меня есть другие внешние ключи, настроенные таким же образом для других таблиц, и они работают нормально.У меня все отношения настроены правильно.

1 Ответ

2 голосов
/ 02 июля 2019

Установите групповую миграцию на более раннюю, до того, как произойдет миграция пользовательской таблицы. В противном случае еще не существует таблицы команд, на которую можно ссылаться при создании пользовательской таблицы, и, следовательно, ошибка.

IE

Schema::create('teams', function (Blueprint $table) {...}

ТО

 Schema::create('users', function (Blueprint $table) {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...