Проект, над которым я работаю, использует 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:
Я проверил структуру таблицы после удаления строки, которая добавляет внешний ключ, и, очевидно, внешний ключ не установлен.Так что никакая другая миграция не делает то же самое.