Это можно решить следующим образом, если вы уже добавили Scout в свой проект:
- Создайте свой собственный
app\Scout\EngineManager.php
:
<?php declare(strict_types = 1);
namespace App\Scout;
use Algolia\AlgoliaSearch\Config\SearchConfig;
use Algolia\AlgoliaSearch\SearchClient as Algolia;
use Algolia\AlgoliaSearch\Support\UserAgent;
use Laravel\Scout\EngineManager as BaseEngineManager;
use Laravel\Scout\Engines\AlgoliaEngine;
class EngineManager extends BaseEngineManager
{
/**
* Create an Algolia engine instance.
*
* @return \Laravel\Scout\Engines\AlgoliaEngine
*/
public function createAlgoliaDriver()
{
$this->ensureAlgoliaClientIsInstalled();
UserAgent::addCustomUserAgent('Laravel Scout', '7.0.0');
$config = SearchConfig::create(config('scout.algolia.id'), config('scout.algolia.secret'));
$config->setConnectTimeout(10);
$algolia = Algolia::createWithConfig($config);
return new AlgoliaEngine(
$algolia,
config('scout.soft_delete')
);
}
}
Создайте свой собственный
app\Scout\Searchable.php
:
<?php declare(strict_types = 1);
namespace App\Scout;
use Laravel\Scout\Searchable as BaseSearchable;
trait Searchable
{
use BaseSearchable;
/**
* Get the Scout engine for the model.
*
* @return mixed
*/
public function searchableUsing()
{
return app(EngineManager::class)->engine();
}
}
Создайте свой собственный
app\Providers\ScoutServiceProvider.php
:
<?php declare(strict_types = 1);
namespace App\Providers;
use App\Scout\EngineManager;
use Laravel\Scout\ScoutServiceProvider as BaseScoutServiceProvider;
class ScoutServiceProvider extends BaseScoutServiceProvider
{
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->app->singleton(EngineManager::class, function ($app) {
return new EngineManager($app);
});
parent::register();
}
}
Исключить пакет разведчика по умолчанию из обнаружения пакета в вашем
composer.json
:
"extra": {
"laravel": {
"dont-discover": [
"laravel/scout"
]
}
},
Добавьте свой ScoutServiceProvider
в список поставщиков в config/app.php
.
Выполнить composer dumpautoload
.
Всякий раз, когдадобавив черту Searchable
к модели, добавьте к ней свою собственную черту вместо разведчика.
Если вы хотите сделать тайм-аут зависящим от среды, его можно извлечь внастройка конфига.Также имейте в виду, что приведенное выше является минимальным для того, чтобы заставить черту Searchable
работать с более длительным тайм-аутом, другие классы также могут быть переопределены для работы других функций.