laravel 5.4 - php artisan migrate 命令不起作用

laravel 5.4 - php artisan migrate command doesn't work

我有四个迁移文件,当我在命令行中 运行 php artisan migrate 时,它说:

Nothing to migrate

我也试过 php artisan migrate --database=vcp:

Database [vcp] not configured.

我在 .env 文件中使用了另一个数据库并再次 运行 php artisan migrate 命令:

Migration table created successfully.
Nothing to migrate. 

运行宁

php artisan migrate:refreshphp artisan migrate:resetphp artisan migrate:statusphp artisan migrate --path="database/migrations/migration_file" 这些消息

Nothing to rollback.
Nothing to migrate.
No migrations found

composer dump-autoload or composer update

没有帮助。

这是我的 .env 文件

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=vcp
DB_USERNAME=root
DB_PASSWORD=secret

我的2017_05_10_201750_add_columns_to_users.php

<?php

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

class AddColumnsToUsers extends Migration
   {
       /**
         * Run the migrations.
         *
         * @return void
        */
       public function up()
      {
            Schema::table('users', function (Blueprint $table) {
                $table->string('status')->default('online');
                $table->string('api_token');
           });
       }

     /**
      * Reverse the migrations.
      *
      * @return void
     */
    public function down()
     {
         Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('status');
            $table->dropColumn('api_token');
        });
     }
} 

请帮忙!

正如您在上述评论中所述,The changes are done directly on database。那么 Nothing to migrate. 是正确的。

尝试理解这个概念,迁移包含文件中的 table 结构,当您 运行 迁移时,这些 table 是在数据库中创建的。当您在迁移文件中进行更改时,您必须再次 运行 迁移,以便这些更改反映回数据库 table。所以流程是:

migration file -> database table

没有

database table -> migration file

以下是对我有用的方法:

首先,删除所有数据库 table,包括迁移 table。 其次,您的 AddColumnsToUsers 文件的更新方法 up() 如下所示:

public function up()
    {
    DB::beginTransaction();
    try {

        Schema::table('users', function (Blueprint $table) {
            $table->string('status')->default('online');
            $table->string('api_token');
       });

    DB::commit();
    } catch (PDOException $e) {
        DB::rollBack();
        $this->down();
    }
}

这将检查您的数据库以查看 table 是否已经存在,如果不存在则创建 table,如果存在则回滚。 让我知道这是否有效。

有时您会像我一样手动编写 Migration 函数,复制并粘贴一个旧函数,然后手动更改文件名。 前任: 文件 2021_10_13_082805_insert_fields_pages_table.php 如果情况相同,请注意 class 名称,它必须包含反映文件名的名称。 在这个例子中:

class InsertFieldsPagesTable extends Migration

如果您忘记更改 class 名称,迁移将什么也不做。