1

目前我面临以下问题:

我想在我的数据库更新后自动更新我的搜索索引。我在 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 中的所有东西一样),但我无法完成它......

4

3 回答 3

1

正确的格式是:

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']);

另一个使用控制器 make 命令的示例,注意这次我们使用签名段{name}

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

同样,这里可能存在一个潜在问题 - 您应该尝试直接从控制台/终端运行导入命令,看看是否遇到同样的问题。

于 2017-01-17T08:24:36.470 回答
0

You don't need to sync with algolia using an artisan call. Refer to algolia documentation:

Algolia Laravel Doc

'Every time you modify a model, Laravel emits an event. Scout is listening for that event, informing your app to make an HTTP call to Algolia to update its index. You don’t have anything else to do, use your searchable class the way you usually would do'

于 2020-08-29T16:35:07.510 回答
0

尝试这个:

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

Artisan::queue('scout:import {input}', ['App\\\Customer']);
于 2017-01-17T08:24:27.787 回答