2017-10-20 51 views
0

既存のレコードをアルゴリアにインポートしようとしています。 algolia-php-sdkとLaravel 5.5scout 3.0.0を使用しています。私はphp artisan scout:import "App\Listings" -vを実行すると、それは次の例外BadMethodCallException未定義のメソッドを呼び出す Database Query Builder :: searchable()

[BadMethodCallException]             
    Call to undefined method Illuminate\Database\Query\Builder::searchable() 


Exception trace: 
() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php:2457 
Illuminate\Database\Query\Builder->__call() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:1273 
Illuminate\Database\Eloquent\Builder->__call() at /home/vagrant/Code/vendor/laravel/scout/src/Searchable.php:102 
App\Listings::makeAllSearchable() at /home/vagrant/Code/vendor/laravel/scout/src/Console/ImportCommand.php:43 
Laravel\Scout\Console\ImportCommand->handle() at n/a:n/a 
call_user_func_array() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:29 
Illuminate\Container\BoundMethod::Illuminate\Container\{closure}() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:87 
Illuminate\Container\BoundMethod::callBoundMethod() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php:31 
Illuminate\Container\BoundMethod::call() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/Container.php:549 
Illuminate\Container\Container->call() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Command.php:180 
Illuminate\Console\Command->execute() at /home/vagrant/Code/vendor/symfony/console/Command/Command.php:262 
Symfony\Component\Console\Command\Command->run() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Command.php:167 
Illuminate\Console\Command->run() at /home/vagrant/Code/vendor/symfony/console/Application.php:888 
Symfony\Component\Console\Application->doRunCommand() at /home/vagrant/Code/vendor/symfony/console/Application.php:224 
Symfony\Component\Console\Application->doRun() at /home/vagrant/Code/vendor/symfony/console/Application.php:125 
Symfony\Component\Console\Application->run() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Application.php:88 
Illuminate\Console\Application->run() at /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php:121 
Illuminate\Foundation\Console\Kernel->handle() at /home/vagrant/Code/artisan:35 
` 

を投げる私が挿入されたレコードをカスタマイズすることもモデルにtoSearchableArray()方法をSearchable形質を含んでいます。

Storeという別のモデルがあります。私はそのモデルを問題なく藻類に輸入することができます。私はthis linkに行った。どちらのモデルも同じベースモデルクラスを拡張しているので、上記のリンクは私にも役に立たなかった。

今後の今後のヒントについては、非常に感謝しています。

EDIT コードサンプル

namespace App; 

use App\Services\Search\Builders\ListingRecordBuilder; 

use Laravel\Scout\Searchable; 
. 
. 
. 

class Listings extends BaseModel 
{ 
    use Searchable; 
. 
. 
. 
    public function searchableAs() 
    { 
     return 'local_listings_new'; 
    } 

    public function toSearchableArray() 
    { 
     $recordBuilder = new ListingRecordBuilder($this); 

     return $recordBuilder->buildRecord(); 
    } 
} 
+0

あなたはメソッドをインポートしましたか? –

+1

こんにちは@HaroenViaene私はいくつかのコードを使用して質問を更新しました。はい、私はその特性をインポートしてモデルで使用しましたが、このことは別のモデルでも完全に機能します。 –

+0

また、 'record builder'は完璧な配列構造体を返します。配列内に1つのフィールドだけを使ってみました –

答えて

1

私は自分自身をこれを考え出しました。モデルは、レコードが挿入されている藻類インデックスを示すために使用される$indices配列/プロパティを含んでいた。それと同時に、searchableAs()メソッドも含まれています。これは、藻類インデックスを指定する同じタスクを実行しています。その$indices配列がコンストラクタを介して設定されているので、最初の見た目では私は原因を明らかにすることができませんでした。

$indicesの配列と、コンストラクタが$indicesの初期化を行うコードを削除するだけで問題が解決しました。しかしまだ知られていないスカウトがなぜスローするCall to undefined method::Searchable()例外

関連する問題