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

あなたの真ん中の例がおそらく最も近く、正しいパラメーターでコマンドを実行していると思いますが、水面下で何か他のことが起こっています。

編集

もう少し掘り下げてみると、Console コマンドの署名を参照する必要がありますが、これは実際には表面的には明らかではありません。あなたの場合、次のコンソール コマンドを参照する必要があります。

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

ここでも、おそらく根本的な問題があります。コンソール/ターミナルから import コマンドを直接実行して、同じ問題が発生するかどうかを確認してください。

于 2017-01-17T08:24:36.470 に答える
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 に答える