我正在构建一个需要通过网页创建新数​​据库、执行迁移和种子数据库数据的应用程序。

我正在尝试使用 Laravel 4.2 中的以下代码来实现这一点。请注意,这是在我设置的 Controller 中。

Artisan::call("migrate", array(
    "--env" => "production"
));

无论我使用“--env”选项传递什么环境,运行迁移的环境都是站点当前运行的当前环境。 IE。如果我在我的本地环境中运行,并且我运行上面的,它将在本地环境中执行迁移,这不是我想要做的。

如果我从命令行运行等效的命令 php artisan --env=production migrate,我会得到我想要实现的结果。目前,我正在通过 passthru() 解决这个问题,但如果可以的话,我想利用这个 Artisan 外观。

有谁知道这是怎么回事?

最佳答案

这不是一种令人愉快的方式,但它确实有效。

假设您的 Artisan 环境基于 $_SERVER['HTTP_HOST'] 并且您知道将加载您的环境的 HTTP_HOST,那么您可以在调用 start.php 之前手动设置它

我用它来定义基于我在 Behat 配置文件中使用的 base_url 的 Artisan 环境。这样我就可以在运行测试之前配置我的数据库。

/**
 * @BeforeSuite
 */
public static function runFixtures(SuiteEvent $suiteEvent) {

    // Get the environment domain
    $parameters = $suiteEvent->getContextParameters();
    $baseUrl = $parameters['base_url'];
    $urlParts = parse_url($baseUrl);
    $_SERVER['HTTP_HOST'] = $urlParts['host'];

    // Now call start.php
    require_once 'bootstrap/start.php';

    // Call Artisan
    $stream = fopen('php://output', 'w');
    Artisan::call(
        'migrate:refresh',
        [
            '--seed' => true,
        ],
        new StreamOutput($stream)
    );
}

关于laravel-4 - Laravel 4.2,Artisan::call() 忽略 --env 选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24643449/

10-12 19:47