Laravel 5 - 跳过迁移

Posted

技术标签:

【中文标题】Laravel 5 - 跳过迁移【英文标题】:Laravel 5 - skip migrations 【发布时间】:2016-05-09 00:27:47 【问题描述】:

我已经迁移了一个现有的 Laravel 5 应用程序和数据库。只有没有迁移表,所以我使用以下命令创建了它:

php artisan migrate:install

在数据库迁移文件夹中存在三个文件(2015_12_08_134409_create_tables_script.php、2015_12_08_134410_create_foreign.php、2015_12_08_134411_create_index.php)

当使用“php artisan migrate”时,迁移文件夹中的脚本会再次执行。这是我想要避免的。是否可以在 Laravel 的迁移表中插入记录,因此一旦再次执行 'php artisan migrate' 将跳过这些脚本并选择新脚本?

【问题讨论】:

你看了吗laravel.com/docs/5.0/migrations#database-seeding 【参考方案1】:

另一种方法是在database/migrations 下创建一个文件夹来放置您想要跳过迁移的文件,此方法适用于已迁移或尚未迁移的文件。

# Execute commands in laravel project root folder
mkdir database/migrations/ignored
mv database/migrations/2018_08_14_000000_should_ignore_migration.php \
   database/migrations/ignored/

# Check migration has been skipped
php artisan migrate:status

2018-09-25 更新:

此Artisan CLI extension command 支持在 Laravel 5.4 或更高版本上迁移特定文件的单个命令:

# Install extension
composer require caloskao/migrate-specific

# Migrate
php artisan migrate:specific /path/to/migration_file.php

【讨论】:

【参考方案2】:

创建迁移表后,插入这些记录:

insert into migrations(migration, batch) values('2015_12_08_134409_create_tables_script',1);
insert into migrations(migration, batch) values('2015_12_08_134410_create_foreign',1);
insert into migrations(migration, batch) values('2015_12_08_134411_create_index',1);

因此工匠会将这些迁移理解为“已执行”

【讨论】:

完美!现在的结果是:“没有什么可迁移的。”非常感谢! 向迁移表插入记录时,批次值(如上图1)应为下一个批次号。 谢谢!我已经插入了所有我已经完成的迁移并且它工作了,谢谢。 FWIW,我更喜欢从 0 开始,因为批处理值是数据库已迁移,并且出于任何原因 migrations 表不存在或为空。 这是一个重要提示,它帮助我跳过了一些发生在我们环境中的一个数据库上的迁移。谢谢塞尔吉奥。

以上是关于Laravel 5 - 跳过迁移的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.7 工匠迁移

Laravel 5.5 中的迁移问题

Laravel 5.5 使用生产数据库整合迁移

完全重置 Laravel 5 迁移的东西?

laravel 5.4 迁移无法正常工作

laravel 5.4 迁移问题