为什么Windows上的Laravel Migrations迁移第一个表而不迁移其他表?

时间:2018-03-28 03:46:59

标签: php laravel composer-php laravel-5.5 artisan

例如,我需要迁移三个迁移表(例如,用户,角色,部门)。在laravel中,它就像发出命令一样简单:

php artisan migrate

但是,我使用的是Windows(cmd / powershell),每次发出migrate命令时,只会迁移第一个表。如果我尝试重新发出migrate命令,则会收到一条错误,指出“Users表存在”。

我的laravel安装中是否有错误或这是正常的吗?

为了绕过上述错误,我必须重命名每个表。例如,如果我迁移了“User”,那么我需要将User表重命名为:

"create_users_table_2344747474.sql.bak"

上面对我来说是必要的,以便于其他表的迁移,在本例中“角色”和“部门”如上所述。

安装技术规格:

更新:特定错误。说明:如下所示,“用户表”已成功迁移。我可以在mysql中看到它。但是,其他表不会迁移。 Laravel Laravel Framework 5.6.13

error specified

更新:用户表迁移。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

这些其他迁移不会“迁移”到数据库中。

enter image description here

2 个答案:

答案 0 :(得分:1)

你的mysql版本是什么?根据文档:如果您运行的是早于5.7.7版本的MySQL版本或早于10.2.2版本的MariaDB,您可能需要手动配置迁移生成的默认字符串长度,以便MySQL为其创建索引他们。您可以通过在AppServiceProvider中调用Schema :: defaultStringLength方法来配置它:

use Illuminate\Support\Facades\Schema;

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Schema::defaultStringLength(191);
}

答案 1 :(得分:0)

我遇到了同样的问题..这是因为用户表中的电子邮件字段,但我通过添加数据长度来解决它:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email', 255)->unique();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

然后,做php artisan migrate:refresh。 如果仍然无法正常工作,请打开您的数据库,然后删除所有表格并再次迁移..希望这可以帮助您解决问题