Вы можете использовать Dependency Injection для своей модели продукта с resolving
hook
У поставщика услуг:
use App\Product;
$this->app->resolving(Product::class, function ($product, $app) {
$request = $app['request'];
if ($request->isConnection1()) {
$product->setConnection('connection1');
}
elseif ($request->isConnection2()) {
$product->setConnection('connection2');
}
});
Мой пример, очевидно, не работает, потому что я не знаю ваш контекст, но он показывает вам способ мышления.
Другим способом было бы добавить промежуточное программное обеспечение к вашим маршрутам вокруг ProductController
, которое устанавливает соединение с БД по умолчанию (используется вашими моделями, когда оно не указано)
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Database\ConnectionResolverInterface as DatabaseManager;
class SwitchConnection
{
protected $dbManager;
public function __construct(DatabaseManager $dbManager)
{
$this->dbManager = $dbManager;
}
public function handle($request, Closure $next, string $connection)
{
$this->dbManager->setDefaultConnection($connection);
return $next($request);
}
}
Кстати, если вы называете это промежуточное ПО как switch.connection
и добавляете switch.connection:connection1
к промежуточному ПО маршрута, оно автоматически переключится, и поэтому вы можете использовать тот же контроллер.