У меня проблема с BadMethodCallException: вызов неопределенного метода App \ Service :: makeAllSearchable (), хотя у меня есть черта Searchable (ScoutElastic \ Searchable).
Я использую laravel 5.8 иasticsearch 6.8.1, также использую babenkoivan / scout -asticsearch-driver. У меня есть 2 модели для поиска.
1. Doctor.php и
2. Service.php
Когда я запускаю команду php artisan scout:import "App\Doctor"
, она работает нормально, но php artisan scout:import "App\Service"
выдает ошибку.
Для модели «Доктор и Сервис» у меня есть следующие файлы
- Service.php - ServiceIndexConfigurator.php - ServiceSearchRule.php
- Doctor.php --- DoctorIndexConfigurator.php - DoctorSearchRule.php
Код FYI для Доктора почти такой же.
Вот Service.php
namespace App;
use ScoutElastic\Searchable;
use Illuminate\Database\Eloquent\Model;
class Service extends Model
{
use Searchable;
/**
* @var string
*/
protected $indexConfigurator = ServiceIndexConfigurator::class;
/**
* @var array
*/
protected $searchRules = [
ServiceSearchRule::class
];
/**
* @var array
*/
protected $mapping = [
'properties' => [
'service_name' => [
'type' => 'text'
],
'description' => [
'type' => 'text'
]
]
];
public function toSearchableArray()
{
return $this->only('service_name', 'description');
}
public function user()
{
return $this->belongsTo(User::class);
}
}
ServiceIndexConfigurator.php
<?php
namespace App;
use ScoutElastic\IndexConfigurator;
use ScoutElastic\Migratable;
class ServiceIndexConfigurator extends IndexConfigurator
{
use Migratable;
/**
* @var array
*/
protected $name = 'service_index';
protected $settings = [
'analysis' => [
'analyzer' => [
'es_std' => [
'type' => 'standard',
'stopwords' => '_english_'
]
]
]
];
}
ServiceSearchRule.php
namespace App;
use ScoutElastic\SearchRule;
class ServiceSearchRule extends SearchRule
{
/**
* @inheritdoc
*/
public function buildHighlightPayload()
{
//
}
/**
* @inheritdoc
*/
public function buildQueryPayload()
{
$query = $this->builder->query;
return [
'should' => [
[
'match' => [
'service_name' => [
'query' => $query,
'boost' => 1
]
]
],
[
'match' => [
'country' => [
'query' => $query,
'boost' => 2
]
]
],
[
'match' => [
'description' => [
'query' => $query,
'boost' => 3
]
]
],
[
'match' => [
'approx_cost' => [
'query' => $query,
'boost' => 4
]
]
],
[
'match' => [
'currency' => [
'query' => $query,
'boost' => 5
]
]
]
]
];
}
}
Сообщение об ошибке
BadMethodCallException : Call to undefined method App\Service::makeAllSearchable()
at /var/www/html/medicoocean.test/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:50
46| * @throws \BadMethodCallException
47| */
48| protected static function throwBadMethodCallException($method)
49| {
> 50| throw new BadMethodCallException(sprintf(
51| 'Call to undefined method %s::%s()', static::class, $method
52| ));
53| }
54| }
Exception trace:
1 Illuminate\Database\Eloquent\Model::throwBadMethodCallException("makeAllSearchable")
/var/www/html/medicoocean.test/vendor/laravel/framework/src/Illuminate/Support/Traits/ForwardsCalls.php:36
2 Illuminate\Database\Eloquent\Model::forwardCallTo(Object(Illuminate\Database\Eloquent\Builder), "makeAllSearchable", [])
/var/www/html/medicoocean.test/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php:1614