“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
不会删除所有表格?
关于rollback
和reset
的所有这些信息,如果你想更改已经运行的迁移,经验法则是“不要”。创建一个更改表的新迁移(添加/删除/更改列等)并再次运行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
表存储迁移和批处理的名称(键)。当您有各种迁移命令为您执行此操作时,手动编辑该表没有多大意义。它也没有 id
或 autoincrement
列,因此对它运行 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”显示“没有要迁移的东西”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 中使用“php artisan migrate”迁移我的数据库
Laravel - php artisan migrate 不起作用
php artisan migrate 不适用于 Laravel 5.4 中的 XAMPP