【发布时间】:2018-04-06 10:22:06
【问题描述】:
真的只是一个快速的
我有一个现有的 Laravel 应用程序
我想使用迁移将一些列添加到现有表中
所以我做了以下事情:
php artisan make:migration add_columns_to_table
这会在我的迁移文件夹中创建一个名为:
2017_10_25_124938_add_column_to_table.php
并且还在我的数据库迁移表中创建一个条目。都很好。
我可以编辑迁移文件(添加列等)并运行
php artisan migrate
一切都很好
现在 - 我的问题是:
当我开始部署到 live 时,我假设我会登录 live box 并再次运行 create migration 命令:
php artisan make:migration add_columns_to_table
但这会创建一个与我在本地创建/测试的名称不同的迁移?
那么,我需要手动将代码从本地 2017_10_25_124938_add_column_to_table.php 迁移文件复制到在 live box 上创建的那个吗?
这似乎有点落后和繁琐
当 create migration 命令在 live box 上创建不同的命名迁移文件(和 DB 条目)时,在本地创建和测试迁移然后将其部署到 live 的最佳方法是什么?
还是我弄错了?
【问题讨论】:
-
迁移的目的是将数据库设计更改纳入版本控制。所以是的,您将相同的文件部署/上传到您的生产服务器,然后在那之后运行
php artisan migrate。为什么要在生产服务器上单独创建一个新的迁移?你在开发和生产中做不同的事情吗? -
但是,如果我只是将本地文件部署到 live 中,那么 live 数据库中不会有用于迁移的条目吗?那么 laravel 怎么知道去运行它呢?还是 artisan migrate 命令只运行迁移文件夹中的所有内容?
-
不,迁移文件的纯粹存在不会影响您的数据库 :) 当您第一次运行
php artisan migrate时,Laravel 会在数据库中创建一个migrations表,它会在其中跟踪已经运行的迁移。然后它扫描迁移文件夹中的所有文件,仅过滤新文件(即那些不在migrations表中的文件),运行它们并将它们添加到该表中,以便下次运行时它们不会运行@ 987654329@。 (不太确定我是否理解您的问题,如果这不是您想知道的,请问:)) -
啊,没有问题。我的错,我认为它使用表来决定运行哪些迁移。但它实际上使用它来知道哪个不运行。干杯。这清除了它。谢谢你的帮助。
标签: php laravel laravel-5 eloquent migration