我正在构建一个需要通过网页创建新数据库、执行迁移和种子数据库数据的应用程序。
我正在尝试使用 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/