【问题标题】:Running Artisan commands (migrations) outside Laravel 4在 Laravel 4 之外运行 Artisan 命令(迁移)
【发布时间】:2014-05-14 11:56:08
【问题描述】:

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

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

> php artisan migrate

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

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

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您必须通过以下方式启动您的 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');
      

      【讨论】:

      • 我无法在应用程序中初始化程序包时运行 cmd。我想通过代码自动迁移
      • 实际上我需要知道是否有一些全局 App 对象可以访问以调用包类中的所有 laravel 类。而且Artisan::call() 在那里也不起作用
      • 你应该给我们一些你正在做什么的例子,你正在开发什么样的包,这个包的结构,这样我们就可以使用一些东西。编辑给你一些选择。
      • 我明白你明白我的意思。但是$this-&gt;app['artisan'] 在其他类中不可用。我怎么把它弄到那里?我无法像使用 DB 或 Auth 那样通过名称空间解析来访问它,例如 `\Artisan::call()'。这是为什么呢?
      • $this-&gt;app['artisan'] 在提供者中工作。但是我必须在与提供者位于同一目录中的其他类中放入什么。我谈论的另一个类没有任何直接访问 laravel 对象的权限。我用来在那里访问它的命名空间是什么。对不起,我不得不把所有这些都写进 cmets
      猜你喜欢
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 1970-01-01
      • 2016-09-11
      相关资源
      最近更新 更多