2017-10-20 70 views
0

我試圖將一些現有的記錄導入algolia。現在使用Laravel 5.5scout 3.0.0與algolia-php-sdk。當我執行php artisan scout:import "App\Listings" -v,它拋出以下異常BadMethodCallException調用未定義的方法Illuminate 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 
` 

我已經包含在模型中也Searchable性狀toSearchableArray()方法來自定義插入的記錄。

我有另一個模型叫Store。我可以毫無問題地將該模型導入algolia。我已經通過this link。但是我的模型都擴展了相同的basemodel類,所以上面的鏈接也沒有幫助我。

未來的任何提示將不勝感激。

編輯 代碼示例

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我已經用一些代碼更新了這個問題,我使用了YES,我已經導入了這個特性並在模型中使用了它,而且這個東西也適用於另一個模型。 –

+0

也'記錄生成器'返回完美的數組結構,我甚至嘗試過只有一個字段在數組中 –

回答

1

我已經想通了這一點自己。該模型包含一個$indices數組/屬性,用於表示插入記錄的algolia索引。同時,它還包含一個searchableAs()方法,它也在執行指定algolia索引的相同任務。並且該$indices數組通過構造函數填充,所以在第一次看時,我無法揭示罪魁禍首。

因此,簡單地刪除$indices數組和代碼,其中構造函數進行初始化$indices確實爲我工作。但仍然未知,爲什麼偵察員拋出Call to undefined method::Searchable()異常

相關問題