2017-01-17 5 views
1

В настоящее время у меня возникает следующая проблема:Выполнение команды Artisan с аргументами

Я хочу обновить индекс поиска автоматически после обновления базы данных. Я зарегистрировал сохраненный() слушателя на моих таблицах AppServiceProvider:

\App\Customer::saved(function(\App\Customer $customer) { 
    // Update search index here 
}); 

Внутри закрытия я пытаюсь вызвать команду Artisan (разведчик: импорт) проходящее App \\ клиента к команде. Я пробовал

Artisan::queue('scout:import', ['' => 'App\\\Customer']); 
// Fails with message: Uninitialized string offset: 0 

Artisan::queue('scout:import', ['model' => 'App\\\Customer']); 
// Fails: Cannot redeclare class App\Customer 

Artisan::queue('scout:import', ['App\\\Customer']); 
// Fails: Not enough arguments (missing: "model") 

Я не нашел информацию о том, где разместить необходимые аргументы в официальной документации.

Я уверен, что он мертв просто (как и все в Laravel), но я не в состоянии сделать это ...

Спасибо за вашу помощь в advande!

ответ

1

Правильный формат:

Artisan::queue('email:send', [ 
    'user' => 1, '--queue' => 'default' 
]); 

По: https://laravel.com/docs/5.3/artisan#programmatically-executing-commands

Я бы сказал, что ваш средний пример, вероятно, ближе всего, и выполняет команду с правильными параметрами, но что-то еще происходит под поверхностью.

EDIT

Просто сделал немного больше копать, вам нужно сослаться на подпись команды консоли, которая не является на самом деле очевидно на поверхности. В вашем случае, вам необходимо обратиться к этой консоли команду:

https://github.com/laravel/scout/blob/2.0/src/Console/ImportCommand.php

Обратите внимание на подпись помечается {model}.

Так что ваша команда будет выглядеть так:

Artisan::queue('scout:import', ['model' => 'App\\\Customer']); 

Другой пример использования команды контроллера грим, обратите внимание, что на этот раз мы используем сегмент подписи {name}:

Artisan::call('make:controller', ['name'=>'FOOBAR']); 

Опять же, есть, вероятно, основной вопрос здесь - вы должны попробовать запустить команду импорта из консоли/терминала напрямую, чтобы узнать, есть ли у вас такая же проблема.

0

Попробуйте это:

\App\Customer::saved(function(\App\Customer $customer, $input) { 
    // Update search index here 
}); 

Artisan::queue('scout:import {input}', ['App\\\Customer']); 
Смежные вопросы