使用参数执行 Artisan 命令
Executing Artisan command with arguments
目前我面临以下问题:
我想在我的数据库更新后自动更新我的搜索索引。
我在 AppServiceProvider:
的表上注册了一个 saved() 侦听器
\App\Customer::saved(function(\App\Customer $customer) {
// Update search index here
});
在闭包内,我尝试调用一个 Artisan 命令 (scout:import),将 App\\Customer 传递给命令。我试过了
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 中的所有内容一样)但我无法完成...
试试这个:
\App\Customer::saved(function(\App\Customer $customer, $input) {
// Update search index here
});
Artisan::queue('scout:import {input}', ['App\\Customer']);
正确的格式是:
Artisan::queue('email:send', [
'user' => 1, '--queue' => 'default'
]);
根据:https://laravel.com/docs/5.3/artisan#programmatically-executing-commands
我想说你的中间示例可能最接近,并且正在使用正确的参数执行命令,但在表面之下还有其他事情发生。
编辑
只是做了更多的挖掘,你需要参考控制台命令的签名,这在表面上实际上并不明显。在你的情况下,你需要参考这个控制台命令:
https://github.com/laravel/scout/blob/2.0/src/Console/ImportCommand.php
请注意签名标有 {model}
。
所以你的命令看起来像:
Artisan::queue('scout:import', ['model' => 'App\\Customer']);
另一个使用controller make命令的例子,注意这次我们使用签名段{name}
:
Artisan::call('make:controller', ['name'=>'FOOBAR']);
同样,这里可能存在潜在问题 - 您应该直接从 console/terminal 尝试 运行 导入命令,看看是否遇到同样的问题。
您不需要使用 artisan 调用与 algolia 同步。
参考 algolia 文档:
'每次修改模型时,Laravel 都会发出一个事件。 Scout 正在侦听该事件,通知您的应用程序对 Algolia 进行 HTTP 调用以更新其索引。
您没有其他事情可做,请像往常一样使用您的可搜索 class'
目前我面临以下问题:
我想在我的数据库更新后自动更新我的搜索索引。 我在 AppServiceProvider:
的表上注册了一个 saved() 侦听器\App\Customer::saved(function(\App\Customer $customer) {
// Update search index here
});
在闭包内,我尝试调用一个 Artisan 命令 (scout:import),将 App\\Customer 传递给命令。我试过了
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 中的所有内容一样)但我无法完成...
试试这个:
\App\Customer::saved(function(\App\Customer $customer, $input) {
// Update search index here
});
Artisan::queue('scout:import {input}', ['App\\Customer']);
正确的格式是:
Artisan::queue('email:send', [
'user' => 1, '--queue' => 'default'
]);
根据:https://laravel.com/docs/5.3/artisan#programmatically-executing-commands
我想说你的中间示例可能最接近,并且正在使用正确的参数执行命令,但在表面之下还有其他事情发生。
编辑
只是做了更多的挖掘,你需要参考控制台命令的签名,这在表面上实际上并不明显。在你的情况下,你需要参考这个控制台命令:
https://github.com/laravel/scout/blob/2.0/src/Console/ImportCommand.php
请注意签名标有 {model}
。
所以你的命令看起来像:
Artisan::queue('scout:import', ['model' => 'App\\Customer']);
另一个使用controller make命令的例子,注意这次我们使用签名段{name}
:
Artisan::call('make:controller', ['name'=>'FOOBAR']);
同样,这里可能存在潜在问题 - 您应该直接从 console/terminal 尝试 运行 导入命令,看看是否遇到同样的问题。
您不需要使用 artisan 调用与 algolia 同步。 参考 algolia 文档:
'每次修改模型时,Laravel 都会发出一个事件。 Scout 正在侦听该事件,通知您的应用程序对 Algolia 进行 HTTP 调用以更新其索引。 您没有其他事情可做,请像往常一样使用您的可搜索 class'