在 Laravel 8 中,我试图在两种情况下设置动态连接:
- 登录后,根据用户设置自定义数据库连接。
在这种情况下,登录后,我在中间件中调用一个方法:
public static function changeConnection($customerId)
{
$database = Database::where('customer_id', '=', $customerId)->first();
if (empty($database)) {
return null;
}
$connectionName = 'customer';
$config = Config::get('database.connections.' . $connectionName);
$config = [
'driver' => 'mysql',
'host' => $database->database_host,
'port' => $database->database_port,
'database' => $database->database_name,
'username' => $database->database_username,
'password' => $database->database_password
];
config()->set('database.connections.' . $connectionName, $config);
DB::purge($connectionName);
return $connectionName;
}
这很完美,连接也很完美。
- 我需要在工作中运行一些进程。所以我需要访问每个用户数据库,我尝试执行相同的过程,但我不断收到错误消息:
local.ERROR: SQLSTATE[HY000] [2002] 没有这样的文件或目录(SQL:select ... 为空){“异常”:“[对象](Illuminate\Database\QueryException(代码:2002):SQLSTATE[HY000 ] [2002] /app/vendor/laravel/framework/src/Illuminate/Database/Connection.php:671 中没有这样的文件或目录(SQL:select ... 为空)
有什么想法吗?,我猜在工作中,因为它在控制台中运行,所以程序不同?