【发布时间】:2019-06-11 08:29:11
【问题描述】:
我正在进行的一个项目使用 mysql 数据库进行测试和开发(不同的数据库)。运行 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');
测试可以再次运行。但是,我想要那个外键关系-.-
更新2:
我在删除添加外键的行后检查了表结构,显然没有设置外键。所以没有其他迁移在做同样的事情。
【问题讨论】:
-
您确定错误来自此数据库迁移吗?
-
如前所述 - 当删除我在“更新”下方发布的行时,它工作正常......这真的很奇怪,我用 laravel 做了很多项目,以前从未有过。
-
我还尝试将外键定义与表创建分开。还是同样的问题。
标签: laravel