在Laravel 4之外运行Artisan命令(迁移)

时间:2014-05-14 11:56:08

标签: php laravel laravel-4

目前我正在从命令行运行数据库迁移,如下所示:

> php artisan migrate:make foo --create:footable

> php artisan migrate

但是,如何从非Laravel脚本运行Laravel 4迁移?而不是通常的工匠migarte命令,甚至是Artisan::call()指令。

为了澄清,我需要运行已经创建的迁移。

2 个答案:

答案 0 :(得分:2)

在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'))

答案 1 :(得分:1)

您必须执行以下操作来启动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');