2014-10-02 8 views
6

In der Shell kann ich eine Datenbankmigration (zum Beispiel) erstellen passiert etwa so:Mit Artisan :: call() nicht-Option Argumente

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

Mit Artisan :: call() Ich kann nicht Erarbeiten, wie ein Nicht-Argument-Parameter übergeben wird ("mymigration" in diesem Beispiel). Ich habe viele Varianten des folgenden Codes ausprobiert:

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

Wer hat irgendwelche Ideen? Ich habe in der Zwischenzeit shell_exec ('./ artisan ...') benutzt, aber ich bin nicht glücklich mit dem Ansatz.

Antwort

6

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

Übrigens db: migrate ist kein handwerklicher Befehl out of the box. Bist du sicher, dass das korrekt ist?

+0

Sie haben Recht - ich meinte migrieren: machen - aber die Frage war über Handwerker Befehle im Allgemeinen. Danke für deine Antwort. – GuruBob

5

Die Lösung ist anders, wenn Sie Laravel 5.1 oder neuer verwenden. Nun müssen Sie den Namen kennen, der dem Argument in der Signatur des Befehls übergeben wurde. Sie können den Namen des Arguments in Ihrer Befehlsshell finden, indem Sie php artisan help gefolgt von dem Befehlsnamen verwenden.

Ich denke, Sie wollten nach "make: migration" fragen. So zeigt zum Beispiel php artisan help make:migration, dass es einen Parameter namens "name" akzeptiert. Sie können es so nennen: Artisan::call('make:migration', ['name' => 'foo' ]).

+1

Dies ist auch der richtige Weg für Laravel 4.2 –

+0

Dies ist die Lösung, die perfekt für mich funktionierte. Mit Laravel 5.3 – dxhans5

3

In Laravel 5.1 legen Sie Optionen mit/ohne Werte fest, wenn Sie einen Artisan-Befehl aus Ihrem PHP-Code aufrufen.

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

in diesem Fall innerhalb Ihres Handwerkerbefehls;

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

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

Ich denke, diese Antwort ist ein anderes Problem gelöst - Wie nicht-Wert-Optionen an Handwerker Befehl übergeben? In meinem Fall war dies eine Lösung, weil ich die Option "--force" an den Befehl "migrieren" übergeben musste. – MingalevME

0

In dir gebiete Sie hinzufügen 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'), 
    ); 
} 

können Sie die Argumente verwenden:

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

Aufruf Befehl, den Sie mit den Parametern:

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

Für Weitere Informationen finden Sie unter article.