2017-10-20 44 views
0

J'essaie d'importer des enregistrements existants dans algolia. maintenant en utilisant Laravel 5.5 et scout 3.0.0 avec algolia-php-sdk. quand j'exécute php artisan scout:import "App\Listings" -v, il jette l'exception suivanteBadMethodCallException Appel à la méthode non définie 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 
` 

J'ai inclus trait Searchable dans le modèle également la méthode toSearchableArray() pour personnaliser l'enregistrement inséré. J'ai un autre modèle appelé Store. et je peux importer ce modèle à algolia sans aucun problème. J'ai traversé this link. mais mes deux modèles étendent la même classe basemodel donc le lien ci-dessus ne m'a pas aidé non plus.

tous les conseils sur l'avenir seraient grandement appréciés.

EDIT Exemple de code

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

avez-vous importé la méthode? –

+1

hi @HaroenViaene J'ai mis à jour la question avec du code que j'utilise et OUI, j'ai importé le trait et l'ai utilisé dans le modèle, et cette chose fonctionne parfaitement avec un autre modèle aussi. –

+0

aussi le 'record builder' retourne structure de tableau parfaite et j'ai même essayé avec un seul champ dans le tableau –

Répondre

1

J'ai compris cela moi-même. Le modèle contenait un tableau/propriété $indices qui est utilisé pour désigner l'index algolia où l'enregistrement est inséré. en même temps, il contient une méthode searchableAs() qui effectue la même tâche de spécification de l'indice algolia. et que le tableau $indices est rempli via le constructeur, donc dans le premier coup d'oeil je n'ai pas pu révéler le coupable.

Supprimer simplement le tableau $indices et le code où le constructeur fait l'initialisation de $indices a fonctionné pour moi. Mais encore son inconnu pourquoi Scout jette Call to undefined method::Searchable() Exception