2014-10-02 45 views
6

在shell我可以創建一個數據庫遷移(例如),像這樣:使用Artisan ::調用()通過非選項參數

./artisan migrate:make --table="mytable" mymigration 

使用Artisan ::調用()我不能弄清楚如何傳遞非參數參數(本例中爲「mymigration」)。我已經嘗試了以下代碼的很多變體:

Artisan::call('db:migrate', ['--table' => 'mytable', 'mymigration']) 

任何人有任何想法?在此期間,我一直在使用shell_exec('./ artisan ...'),但我對這種方法並不滿意。

回答

6

Artisan::call('db:migrate', ['' => 'mymigration', '--table' => 'mytable'])應該工作。

順便說一句db:遷移不是開箱即用的工匠命令。你確定這是正確的嗎?

+0

你是對的 - 我的意思是遷移:make - 但問題是關於一般的工匠命令。感謝您的回答。 – GuruBob 2014-10-02 11:18:02

5

如果您使用Laravel 5.1或更新版本,解決方案會有所不同。現在你需要做的是你需要知道命令簽名中參數的名稱。您可以通過使用php artisan help後跟命令名稱從命令shell中找到參數的名稱。

我想你的意思是詢問「make:migration」。因此,例如php artisan help make:migration顯示它接受一個名爲「name」的參數。所以你可以這樣稱呼它:Artisan::call('make:migration', ['name' => 'foo' ])

+1

這也是Laravel 4.2的正確方法 – 2016-02-04 10:50:58

+0

這是爲我自己完美工作的解決方案。使用Laravel 5.3 – dxhans5 2017-01-18 21:27:21

3

在laravel 5.1中,當您從PHP代碼調用Artisan命令時,可以使用/不使用值來設置選項。

Artisan::call('your:commandname', ['--optionwithvalue' => 'youroptionvalue', '--optionwithoutvalue' => true]); 

在這種情況下,在您的工匠命令;

$this->option('optionwithvalue'); //returns 'youroptionvalue' 

$this->option('optionwithoutvalue'); //returns true 
+1

我認爲這個答案解決了另一個問題 - 如何將非價值選項傳遞給artisan命令?在我的情況下,這是一個解決方案,因爲我需要將'--force'選項傳遞給'migrate'命令。 – MingalevME 2017-03-01 05:35:22

0

在你指揮你添加getArguments():

/** 
* Get the console command arguments. 
* 
* @return array 
*/ 
protected function getArguments() 
{ 
    return array(
     array('fdmprinterpath', InputArgument::REQUIRED, 'Basic slice config path'), 
     array('configpath', InputArgument::REQUIRED, 'User slice config path'), 
     array('gcodepath', InputArgument::REQUIRED, 'Path for the generated gcode'), 
     array('tempstlpath', InputArgument::REQUIRED, 'Path for the model that will be sliced'), 
     array('uid', InputArgument::REQUIRED, 'User id'), 
    ); 
} 

您可以使用參數:

$fdmprinterpath = $this->argument('fdmprinterpath'); 
$configpath  = $this->argument('configpath'); 
$gcodepath  = $this->argument('gcodepath'); 
$tempstlpath = $this->argument('tempstlpath'); 
$uid   = $this->argument('uid'); 

叫你命令參數:

Artisan::call('command:slice-model', ['fdmprinterpath' => $fdmprinterpath, 'configpath' => $configpath, 'gcodepath' => $gcodepath, 'tempstlpath' => $tempstlpath]); 

對於更多信息請參考此article