Миграции - дублирующий ключ при записи или обновлении - только для Test Env - PullRequest
0 голосов
/ 11 июня 2019

Проект, над которым я работаю, использует mysql db для тестирования и разработки (разные db).При запуске php artisan migrate:refresh все отлично работает.

Однако при запуске тестов не удается выполнить все миграции со следующей ошибкой:

Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1005 Can't create table `cmstatic_test`.`#sql-5008_121` (errno: 121 "Duplicate key on write or update") (SQL: alter table `project_user` add constraint `project_user_user_id_foreign` foreign key (`user_id`) references `users` (`id`) on delete cascade)

Вот мой метод перехода вверх

    public function up()
    {
        Schema::create('project_user', function (Blueprint $table) {

            $table->unsignedBigInteger('project_id');

            $table->foreign('project_id')
                    ->references('id')->on('projects')
                    ->onDelete('cascade');

            $table->unsignedBigInteger('user_id');

            $table->foreign('user_id')
                    ->references('id')->on('users')
                    ->onDelete('cascade');

            $table->unsignedBigInteger('role_id');

            $table->foreign('role_id')
                    ->references('id')->on('roles');

            $table->timestamps();
        });
    }

Я неузнать, как может быть задан дубликат ключа для этой таблицы.

Мои тесты выглядят как

use Illuminate\Foundation\Testing\RefreshDatabase;

class AuthTest extends TestCase
{
    use RefreshDatabase;

    ...

Обновление:

, если я удаляю

$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

Тесты можно запустить снова.Однако я хочу, чтобы это отношение внешнего ключа -.-

Update2:

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

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Кажется, произошла ошибка с самой моей базой данных. Я несколько раз удалял таблицы и пробовал снова, и ошибка все еще была.

Однако удаление всей базы данных и ее повторное создание выпуск.

Это может быть интересно всем, кто столкнулся с этой проблемой.

0 голосов
/ 11 июня 2019

Попробуйте это:

public function up()
{
    if (!Schema::hasTable('project_user')) {
        Schema::create('project_user', function (Blueprint $table) {
            $table->unsignedBigInteger('project_id');
            $table->foreign('project_id')
                ->references('id')->on('projects')
                ->onDelete('cascade');

            $table->unsignedBigInteger('user_id');
            $table->foreign('user_id')
                ->references('id')->on('users')
                ->onDelete('cascade');

            $table->unsignedBigInteger('role_id');
            $table->foreign('role_id')
                ->references('id')->on('roles');
            $table->timestamps();
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...