如何在Laravel中针对特定环境运行迁移

26

我正在使用 Laravel(Laravel 4)创建一个新的应用程序,但在通过迁移设置数据库时遇到了一些问题。

我创建了一个迁移文件:

artisan migrate:make --table="jobs" --create jobs

按预期创建了一个数据库迁移文件,我对其进行了一些修改,并尝试启动它。

artisan migrate --env=local

但是我得到了"Nothing to migrate"的回复。

如果我尝试在没有--env=local的情况下运行,它将使用配置文件夹中的database.php(而不是本地/暂存/生产文件夹中的文件),我们不想使用该文件,因为它不会是环境特定的。

我的第一反应是好的,也许我需要在migrate:make调用上加上env标志,所以我尝试了一下,但是出现了无法创建迁移文件的错误。然后我想,无论如何都没有意义根据env进行迁移...它们应该是通用的,并且只需在每个env基础上运行,因此最终,所有环境都使用相同的迁移脚本。

所以现在我有点困惑该怎么办了。


根据Laravel版本,请查看此错误:https://github.com/laravel/framework/issues/12944#issuecomment-214751735 - Ryan
4个回答

34

在执行迁移命令前,您需要指定环境。

artisan --env=local migrate

运行artisan help可以展示你需要遵循的命令格式。

artisan help

Usage:
  [options] command [arguments]

5
不幸的是,这没有产生任何影响...仍然收到“没有要迁移的内容”消息。 - duellsy
根据帮助文档,这就是如何指定选项。看一下 artisan help 的格式,它是 [options] command [arguments]。我的建议是要确保您的环境都正确设置。我刚刚检查了,对我来说一切正常。所以你肯定遗漏了其他内容。 - Jason Lewis
不幸的是,这完全是错误的(至少对于我熟悉的 Laravel 版本,如 5.2+)。你甚至可能调用了错误的帮助文件。php artisan help migrate 显示“用法: migrate [options]”,并给出选项示例,例如 --database[=DATABASE]--env[=ENV] - Ryan
你应该在artisan命令后添加选项。例如,我想要在测试环境下删除数据库并从头开始迁移:php artisan migrate:fresh --env=testing。在Laravel 5.5上进行了测试。 - ibnɘꟻ

5

我找到了一个解决方案,可以运行不同数据库的migrate命令。基本上,命令artisan migrate --env=local是无效的。但是我们可以在config\database.php中定义一个新的连接字符串。例如:

<?php
   'mysql_testing' => [
        'driver'    => 'mysql',
        'host'      => env('DB_TESTING_HOST'),
        'database'  => env('DB_TESTING_DATABASE'),
        'username'  => env('DB_TESTING_USERNAME'),
        'password'  => env('DB_TESTING_PASSWORD'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => 'prefix_',
    ],

当我们运行artisan migrate时,需要指定--database参数,如下所示:

php artisan migrate --database=mysql_testing

希望这能帮到您:)

3

已解决。

解决方法很简单,只需编辑local/database.php(或者production/database.php等),确保迁移路径变量指向创建迁移文件的位置,只需要更改如下:

'application' => __DIR__.'/../database/migrations',

to

'application' => DIR.'/../../database/migrations',

1
如果您在运行迁移后修改了它,您需要首先回滚迁移。
php artisan migrate:rollback

一直运行该操作,直到您所更改的迁移被回滚。或者,您可以使用以下命令重置整个模式:

php artisan migrate:reset

但是您需要像平常一样调用迁移来使它们保持最新状态。

php artisan migrate

最后,您可以通过调用重置并迁移。

php artisan rebuild

请注意,修改已经创建的迁移文件通常是不好的做法,除非你刚刚创建它。一旦部署了迁移文件,就不应该再修改它,而是应该创建一个新的迁移文件。
希望这可以帮到您。
编辑:我不知道 Laravel 4 的指示。我相信大多数命令仍然有效,但您可能需要进行调整。

抱歉,当我说“进行了一些修改”时,我只是指我打开了刚生成的迁移文件,并添加了我的迁移代码。我没有编辑已经运行过的迁移。这是该项目的第一个迁移。 - duellsy
使用php artisan migrate:refresh命令,可以轻松地拆除和重建迁移。 - Atheist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接