laravel 5.8中如何正确设置外键约束

时间:2019-04-23 06:19:32

标签: php mysql mariadb laravel-5.8

我后面有一些要迁移的表。如果我尝试将该表迁移到服务器数据库中,则会显示一般错误:1005。 我在底部给出错误和服务器详细信息。请帮助我顺利迁移。

1。)用户

Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });

2。)公司

Schema::create('companies', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->longText('description');
            $table->unsignedInteger('user_id');
            $table->timestamps();

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

3.projects

Schema::create('projects', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->longText('description');
            $table->unsignedInteger('company_id');
            $table->unsignedInteger('user_id');
            $table->timestamps();

            $table->foreign('user_id')->references('id')->on('users');
            $table->foreign('company_id')->references('id')->on('companies');
        });

服务器详细信息

server: 127.0.0.1 via TCP/IP
Server type: MariaDB
Server connection: SSL is not being used Documentation
Server version: 10.1.38-MariaDB - mariadb.org binary distribution
Protocol version: 10
User: root@localhost
Server charset: UTF-8 Unicode (utf8)
DB Name: laravel

错误:

 Illuminate\Database\QueryException  : SQLSTATE[HY000]: General error: 1005 Can't create table `laravel`.`#sql-91c_30` (errno: 150 "Foreign key constraint is incorrectly formed") (SQL: alter table `companies` add constraint `companies_user_id_foreign` foreign key (`use
r_id`) references `users` (`id`))

1 个答案:

答案 0 :(得分:1)

如我所见,在创建bigInteger PK和整数外键时,存在数据类型不匹配的问题,

Schema::create('companies', function (Blueprint $table) {
...
$table->unsignedBigInteger('user_id');
});

在其他表格中

Schema::create('projects', function (Blueprint $table) {
...
$table->unsignedBigInteger('company_id');
$table->unsignedBigInteger('user_id');
});

执行此操作,然后再次检查。