目前我正面临以下问题:
我希望在更新数据库后自动更新搜索索引。 我在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中的所有东西一样)但是我无法完成它......
感谢您在advande的帮助!
答案 0 :(得分:1)
正确的格式是:
Artisan::queue('email:send', [
'user' => 1, '--queue' => 'default'
]);
根据:https://laravel.com/docs/5.3/artisan#programmatically-executing-commands
我说你的中间例子可能是最接近的,并且正在使用正确的参数执行命令,但表面下还会发生其他事情。
修改
只是做了一点挖掘,你需要参考Console命令的签名,这在表面上实际上并不明显。在您的情况下,您需要参考此控制台命令:
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']);
同样,这里可能存在一个潜在的问题 - 你应该尝试直接从控制台/终端运行import命令,看看你是否遇到了同样的问题。
答案 1 :(得分:0)
试试这个:
\App\Customer::saved(function(\App\Customer $customer, $input) {
// Update search index here
});
Artisan::queue('scout:import {input}', ['App\\\Customer']);
答案 2 :(得分:0)
您不需要使用工匠电话与阿尔戈利亚同步。 请参阅algolia文档:
'每次修改模型时,Laravel都会发出一个事件。 Scout正在监听该事件,通知您的应用程序对Algolia进行HTTP调用以更新其索引。 您没有其他事情要做,可以像平常一样使用可搜索的类。