运行一个特定的 Laravel 迁移(单个文件)

5 浏览
0 Comments

运行一个特定的 Laravel 迁移(单个文件)

我的项目中有5个迁移。我只想运行其中一个迁移。是否可以将单个文件的名称传递给php artisan migrate命令?

0
0 Comments

问题的出现原因:当需要运行一个特定的 Laravel 迁移时,可能会遇到问题。如果已经在 app/config/database/migrations/ 文件夹中运行过迁移,再次运行 php artisan migrate 命令时可能会出现问题。

解决方法:将已经运行过的迁移文件移出 app/config/database/migrations/ 文件夹,然后再次运行 php artisan migrate 命令即可解决问题。这种方法已经被证实有效。

然而,一些用户指出,虽然这种方法有效,但在回滚迁移时可能会遇到问题。特别是在插件模块需要卸载时,可能会遇到无法回滚的大问题。

0
0 Comments

问题的原因是需要运行一个特定的Laravel迁移(单个文件),而不是运行整个迁移文件夹中的所有迁移。

解决方法是使用php artisan migrate --path=迁移文件路径命令来指定要运行的迁移文件路径。在这个例子中,路径是/app/database/migrations/my_migrations

这种方法比编辑迁移时间戳更好,尽管后者也可以实现目的。

0
0 Comments

在Laravel中运行特定的迁移(单个文件)

在Laravel中,迁移是按照它们创建的确切顺序逐个执行的,以便可以跟踪执行和执行顺序。这样,Laravel就能够安全地回滚一批迁移,而不会破坏数据库。

如果允许用户手动执行迁移,就无法确切知道如何回滚对数据库的更改。

如果您确实需要在数据库中执行某些操作,最好创建一个DDL脚本并手动在Web服务器上执行它,或者只需创建一个新的迁移并使用Artisan执行它。

如果您需要首先执行迁移,您需要先创建它。迁移是带有时间戳的名称创建的:

2013_01_20_221554_table

要在此之前创建一个新的迁移,您可以将其命名为:

2013_01_19_221554_myFirstMigration

是的,您说得很清楚,但在您的评论结尾处,我看到:“或者只需创建一个新的迁移并使用Artisan执行它。”我创建了一个新的迁移,我想要运行它。如果我运行artisan migrate,此命令将运行我所有的迁移,而不是我创建的新迁移。

如果您需要首先运行它,您需要先创建它。迁移是带有名称时间戳的创建的(2013_01_20_221554_table),只需将您的迁移重命名为第一个即可。

我不是想重新排序我的迁移。我在项目开始时创建了五个迁移。几周后,我发现需要一个新的表,所以我创建了一个新的迁移。我想运行它以添加新的表和其结构。我不明白为什么我应该重新运行已经执行过的迁移,而不只是运行我创建的新迁移?

正如我所说,Laravel会跟踪您的迁移,如果它重新运行任何迁移,那是因为在它上面执行了回滚(或重置),或者迁移表出现了问题。

如果您迁移了数据库,然后添加了新的迁移,只需再次运行Artisan migrate命令即可。它将按照创建顺序迁移所有未迁移的迁移。

Laravel是如何跟踪已经执行的迁移的?它将其存储在数据库中的一个迁移表中吗?

是的,准确地说,有一个用于此目的的迁移文件。

无论如何,我认为运行特定的迁移可能会很有用,特别是如果迁移包括多个相关的表(具有外键和中间表),在这种情况下,您需要按正确顺序删除表。我会创建基本迁移,如catalog_layer、office_layer等,其中包含单个应用功能所需的所有表,然后根据需要添加改进某些表/层的迁移。也许这是错误的方法,但某个功能的所有层内容都在单个文件中,并具有适当的删除顺序,在不断更改和重置(测试/改进/更改)时非常有用。

我同意-在开发过程中,我希望我的迁移是完全正确的。所以当我在生产环境中运行它们时,它们能够无缺地工作。有时(在开发过程中)我回滚到初始状态-更改一个迁移然后重新开始。但是当我迁移时,它会迁移所有的迁移-我宁愿有一个选项来逐个迁移,依然按顺序逐个迁移,这样我就能逐个回滚。

因为“看起来你做错了”。依我看来,Laravel做错了。开发和生产是两个不同的环境,它们需要不同类型的保证和安全措施,如果它们遵循不同的规则,那是完全合理的。开发需要最大的灵活性,而且开发人员可能需要根据自己的需求调整迁移机制。我自己非常缺乏这种灵活性,因此不得不进行直接的数据库操作以实现我想要的结果,在生产环境中这是绝对不会发生的,但在开发过程中经常发生。

我不同意您的观点,因为Laravel没有做错任何事情。规则是“永远不要编辑在生产中执行的迁移”。但是,您可以以任何您认为合适的方式编辑本地迁移。

也许我在这里漏掉了些什么,但是在测试中,执行单个迁移可能非常有用。如果您想在大型迁移之后运行一些测试,那么您很可能首先需要在测试数据库中创建一些表和其他内容,以便您可以填充它。然后,您希望运行您的大型迁移,并确保在测试中一切正常。据我所知,这需要一些在Laravel中的hacky方法,例如将迁移移入和移出迁移目录,或者使用棘手的--path选项。

无论如何重命名文件,手动创建迁移文件对我来说都不起作用。但是,当我通过php artisan make:migration命令创建迁移时,它起作用了。我正在运行Laravel 5.7。

0