Laravel迁移似乎不适用于某些计算机

时间:2018-07-30 05:15:32

标签: php mysql laravel migration

每个人。这是我2年软件开发生涯中的第一篇文章,由于没有相关答案,所以我将其发布,并且我对为什么出现此问题的想法已经用完了。

所以我正在运行一个小项目,我们在Laravel 5.6.28上开发自己的网站,该框架在PHP 7.2.4和MySQL 5.7.21上构建。

大多数情况下,一切似乎都很好,并且我已经使用Laravel框架工作了大约一年,而前一段时间我遇到了这个问题,但是那是在一个测试项目上,所以我并没有真正打扰尝试修复它,但现在又发生了。

当我与项目中的其他用户共享项目代码时会发生这种情况-它适用于除一台计算机以外的大多数计算机。错误消息是       Illuminate \ Database \ QueryException:SQLSTATE [HY000]:常规错误:1005无法创建表...外键约束格式不正确。

我找到的所有解决方案都是检查是否在相应的列中添加了unsigned(),但是我确实检查了它,并且所有外键字段都具有它。此外,在创建表之后,还会添加外键。

似乎在每个表上都崩溃了,但是它在所有其他项目成员计算机上都可以工作。

任何想法可能是什么问题?

这是创建用户表的代码

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('nick_name', 50)->unique();
        $table->string('first_name', 50);
        $table->string('last_name', 50);
        $table->string('email', 100)->unique();
        $table->string('password', 255);
        $table->text('description')->nullable();
        $table->string('twitter', 50)->nullable();
        $table->string('facebook', 50)->nullable();
        $table->string('instagram', 50)->nullable();
        $table->string('linkedin', 50)->nullable();
        $table->float('commitment')->default(1);
        $table->string('position', 100)->default('Employee')->nullable();
        $table->datetime('last_login')->nullable();
        $table->integer('active')->unsigned()->default(1);
        $table->integer('image_id')->unsigned()->default(1);
        $table->integer('role_id')->unsigned()->default(1);
        $table->timestamps();
        $table->rememberToken();
    });

    Schema::table('users', function (Blueprint $table) {
        $table->foreign('image_id')->references('id')->on('files');
        $table->foreign('role_id')->references('id')->on('roles');
    });
}

1 个答案:

答案 0 :(得分:0)

如果我是你,我将像下面那样更新我的代码,并检查其是否有效,

public function up()
{
Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('nick_name', 50)->unique();
    $table->string('first_name', 50);
    $table->string('last_name', 50);
    $table->string('email', 100)->unique();
    $table->string('password', 255);
    $table->text('description')->nullable();
    $table->string('twitter', 50)->nullable();
    $table->string('facebook', 50)->nullable();
    $table->string('instagram', 50)->nullable();
    $table->string('linkedin', 50)->nullable();
    $table->float('commitment')->default(1);
    $table->string('position', 100)->default('Employee')->nullable();
    $table->datetime('last_login')->nullable();
    $table->integer('active')->unsigned()->default(1);
    $table->integer('image_id')->unsigned()->default(1);
    $table->integer('role_id')->unsigned()->default(1);
    $table->timestamps();
    $table->rememberToken();
    $table->foreign('image_id')->references('id')->on('files');
    $table->foreign('role_id')->references('id')->on('roles');
});


}

但是奇怪的是,它可以在另一台计算机上工作,但不能在一台计算机上工作。

祝你好运!