【发布时间】:2014-05-14 11:56:08
【问题描述】:
目前我正在从命令行运行数据库迁移,如下所示:
> php artisan migrate:make foo --create:footable
> php artisan migrate
但是如何从非 Laravel 脚本运行 Laravel 4 迁移?而不是通常的工匠 migarte 命令,甚至是 Artisan::call() 指令。
澄清一下,我需要运行已经创建的迁移。
【问题讨论】:
目前我正在从命令行运行数据库迁移,如下所示:
> php artisan migrate:make foo --create:footable
> php artisan migrate
但是如何从非 Laravel 脚本运行 Laravel 4 迁移?而不是通常的工匠 migarte 命令,甚至是 Artisan::call() 指令。
澄清一下,我需要运行已经创建的迁移。
【问题讨论】:
在 Laravel 4.1+ 中,以下内容不起作用:
Artisan::call('migrate', array('option' => '--bench', 'argument' => 'vendor/package'))
Throws : The "option" argument does not exist.
Artisan::call('migrate --package=vendor/package');
Throws : Command "migrate --bench=vendor/package" is not defined
但这确实:
Artisan::call('migrate', array('--bench'=>'vendor/package'))
【讨论】:
您必须通过以下方式启动您的 Laravel 应用程序:
<?php
require 'vendor/autoload.php';
require 'bootstrap/start.php';
然后您将可以访问 $app 全局变量,该变量包含整个 Laravel 应用程序,包括 Artisan,因此您将能够:
Artisan::call('migrate');
和
$app['artisan']->call('migrate');
如果你有一个外部命名空间类,比如这个:
<?php namespace App\Example;
require 'vendor/autoload.php';
require 'bootstrap/start.php';
use Form;
use Artisan;
class Example {
public function make() {
Artisan::call('migrate');
} `enter code here`
}
您可以使用以下方式调用它:
<?php
require 'Example.php';
use App\Example\Example;
$s = new Example;
dd($s->make());
这是不可取的,但作为最后的手段,您可以使用:
return $GLOBALS['app']['artisan']->call('migrate');
【讨论】:
Artisan::call() 在那里也不起作用
$this->app['artisan'] 在其他类中不可用。我怎么把它弄到那里?我无法像使用 DB 或 Auth 那样通过名称空间解析来访问它,例如 `\Artisan::call()'。这是为什么呢?
$this->app['artisan'] 在提供者中工作。但是我必须在与提供者位于同一目录中的其他类中放入什么。我谈论的另一个类没有任何直接访问 laravel 对象的权限。我用来在那里访问它的命名空间是什么。对不起,我不得不把所有这些都写进 cmets