在 Laravel 中的迁移文件中,创建外键需要格外注意:外键相关联的键之间的类型 必须相同 。这是一个常识的问题。但在迁移文件中非常容易犯错。
    我们知道迁移文件中,主键是这样创建的:

    1. $table->bigIncrements('id');

    看到上述代码,我们很自然的会创建对应的外键:

    1. // 创建外键
    2. $table->bigIntegre('user_id');
    3. // 关联外键
    4. $table->foreign('user_id')->refreences('id')->on('users');

    但是这样,运行 php artisan migrate 的时候,就会报错,说你的外键关联的字段不相同。经过查阅知道,发现 bigIncrements() 这个方法创建的是 UNSIGNED BIG INTEGER (想想也是,主键就应该是无符号类型的)。
    所以将上述的 user_id 的字段类型也改成 UNSIGNED BIG INTEGER 就行了:

    1. $table->unsignedBigInteger('user_id');