“php artisan migrate”显示“没有要迁移的东西”

Posted

技术标签:

【中文标题】“php artisan migrate”显示“没有要迁移的东西”【英文标题】:"php artisan migrate" shows "nothing to migrate" 【发布时间】:2020-01-31 19:51:55 【问题描述】:

我是 laravel 的新手。 我正在开发 laravel 版本 6。 我创建了迁移。 它第一次运行良好,但如果我更改迁移文件中的某些内容,然后运行php artisan migrate,它会显示nothing to migrate。 我也试过php artisan migrate --path,但它不起作用。 为了使它工作,我必须删除迁移文件并重新创建它。 我不想使用php artisan migrate:fresh

我应该怎么做才能只运行一个已更改的迁移文件?

【问题讨论】:

试试php artisan migrate:refresh migrate:refresh 将删除所有表,然后再次运行迁移。 请使用php artisan migrate:rollback 获取上次创建的迁移文件。 所以php artisan migrate:rollback 不会删除所有表格? 关于rollbackreset 的所有这些信息,如果你想更改已经运行的迁移,经验法则是“不要”。创建一个更改表的新迁移(添加/删除/更改列等)并再次运行php artisan migrate。迁移是一种“向前推进”的事情,因此您不必运行回滚和风险数据丢失。 【参考方案1】:

没有人回答“Akshay Rathod”的问题,但“Militaru”准确地回答了他的需求php artisan make:migration alter_table_users --table="users" 并复制了 up() 函数中的新字段,如下所示

public function up()
    
        Schema::table('users', function (Blueprint $table) 
            $table->string('userimage')->nullable();
            $table->string('contact_no')->nullable();
            $table->string('website')->nullable();
            $table->string('country_id')->nullable();
            $table->string('timezone')->nullable();
            $table->string('currency')->nullable();
            $table->string('communication_email')->default(1);
            $table->string('communication_phone')->default(0);
            $table->string('allow_marketing')->default(0);
        );
    

【讨论】:

【参考方案2】:

如果您有播种机数据,那么您只需执行以下操作: php artisan migrate:fresh --seed 。它有助于使用播种机数据重新迁移您的迁移

【讨论】:

【参考方案3】:

对于现有(已迁移的表)的每一次修改,您都必须进行仅修改的新迁移。如果你有“用户”表迁移2014_10_12_000000_create_users_table 喜欢:

 Schema::create('users', function (Blueprint $table) 
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');         
        $table->rememberToken();
        $table->timestamps();
    );

您需要拆分“名称”列,必须 php artisan make:migration alter_table_users --table="users" 并添加您要更改的内容:

Schema::table('users', function (Blueprint $table) 
    $table->renameColumn('name', 'first_name'); // rename column
    $table->string('last_name'); // add new column  );

反转

public function down()
    
        Schema::table('users', function (Blueprint $table) 
            $table->renameColumn('first_name', 'name');
            $table->dropColumn('last_name');
        );
    

你可以使用php artisan migrate

文档:https://laravel.com/docs/6.x/migrations#modifying-columns

【讨论】:

【参考方案4】:

您是否在迁移表中检查过迁移是否已经运行。 如果它运行,那么将有一行与您的迁移相关。 如果您对旧迁移进行更改,那么当您运行命令 php artisan migrate 时将不会反映任何内容,因为它已经被迁移了。

【讨论】:

【参考方案5】:

有两件事你可以使用 1. 在您的数据库中有一个名为迁移的表。从那里删除要迁移的行。那应该在那里。 2.在数据库/迁移/文件夹内创建一个文件夹。并将迁移文件放在文件夹中,然后在命令提示符下运行以下命令:

php artisan migrate:refresh --path=database/migrations/folder

选项 2 比选项 1 更好。我总是使用这个。所以我推荐选项 2。这应该可行

【讨论】:

【参考方案6】:

你没有很好地理解迁移机制。

但是如果我更改了迁移文件中的某些内容,然后我运行 php artisan migrate 它不会显示任何要迁移的内容

您编写迁移以在数据库中进行一些更改并运行一次。如果您想对数据库进行下一次更新,则需要下一次迁移。

在开发过程中,您可以通过 php artisan migrate:fresh 重新运行迁移,但在生产过程中,请确保您的迁移符合您的要求。

Laravel 将有关迁移的信息存储在数据库中的“迁移”表中。如果你想重置一些迁移文件,你可以尝试删除或编辑该表中的一些记录。

【讨论】:

migrations 表存储迁移和批处理的名称(键)。当您有各种迁移命令为您执行此操作时,手动编辑该表没有多大意义。它也没有 idautoincrement 列,因此对它运行 SQL 有时很麻烦。【参考方案7】:

当您运行 php artisan migrate 时,它会检查迁移表,如果迁移文件夹中没有新文件,它会显示没有要迁移的内容。

如果您想回滚上次迁移。

rollback最新的迁移操作,可以使用回滚命令。此命令回滚最后“批次”迁移,其中可能包含多个迁移文件:

php artisan migrate:rollback

它会删除最后创建的表。

migrate:reset 命令将回滚应用程序的所有迁移:

php artisan migrate:reset

migrate:fresh 命令将删除所有表。

php artisan migrate:fresh

php artisan migrate:fresh --seed

更多信息:document

【讨论】:

migrate:fresh 还是migrate:refresh?编辑:没关系;我在较新的文档中看到它:laravel.com/docs/6.x/migrations migrate:refresh 将删除所有表并再次自动创建它。 migrate:fresh 只删除表。 如果你只想删除最后创建的表,你必须使用migrate:rollback 我不介意,但在新的文档迁移概念中是一样的。laravel.com/docs/6.x/migrations#rolling-back-migrations 明白了;我以前没见过fresh 命令,但似乎是一个较新的添加(Laravel 5.5+),它有效地做与refresh 相同的事情,但不回滚;它只是丢弃所有内容并再次执行此操作。很高兴知道!【参考方案8】:

可悲的是不可能的。最好的解决方法是使用播种机并在使用php artisan migrate:fresh 之后使用php artisan db:seed。你为什么不想使用它?

【讨论】:

因为它也会删除我的用户表。所以每次我对迁移文件进行一些更改时,我都必须添加用户。 @AkshayRathod 发明了添加数据播种器 我是 laravel 的新手。我不知道播种机是什么,我必须查一下。

以上是关于“php artisan migrate”显示“没有要迁移的东西”的主要内容,如果未能解决你的问题,请参考以下文章

php artisan migrate 命令迁移错误

如何在 laravel 中使用“php artisan migrate”迁移我的数据库

Laravel - php artisan migrate 不起作用

php artisan migrate 不适用于 Laravel 5.4 中的 XAMPP

执行 php artisan migrate:install报错

Lavarel 执行:php artisan migrate时报错