为什么 Laravel Migrations on Windows 会迁移第一个 table 而不是其他的?

Why does Laravel Migrations on Windows migrates the first table but not the others?

例如,我有三个迁移 table(例如用户、角色、部门)需要迁移。在laravel中,只要发出命令就可以了:

php artisan migrate

但是,我使用的是 Windows(cmd/powershell),每次我发出迁移命令时,只有第一个 table 被迁移。如果我尝试重新发出迁移命令,我会收到一条错误消息,指出 "Users table exists"。

我的 laravel 安装有误还是这是正常的?

为了绕过上述错误,我必须重命名每个 table.For 示例,如果我迁移了 "User",那么我需要将用户 table 重命名为:

"create_users_table_2344747474.sql.bak"

以上内容对我来说是必要的,以便于迁移其他 tables,在此示例中 "Role" 和 "Department" 如上所述。

安装技术规格:

更新: 具体错误。说明:如下图所示,"User table" 迁移成功。我可以在 mysql 中看到它。但是,不会迁移其他 table。 Laravel 是 Laravel 框架 5.6.13

更新: 用户 table 迁移。

<?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');
    }
}

这些其他迁移不是 "migrated" 到数据库。

我曾经遇到过类似的问题。这是因为用户 table 中的电子邮件字段,但我通过添加数据长度解决了这个问题,例如:

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。 如果仍然无法正常工作,请打开您的数据库,然后删除所有 table 并再次迁移它。希望这可以帮助您解决问题

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

中调用 Schema::defaultStringLength 方法来配置它
use Illuminate\Support\Facades\Schema;

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