Skip to content

Connections — 多数据库连接管理器

  • 文件位置: kernel/Foundation/Database/PDO/Connections.php
  • 命名空间: kernel\Foundation\Database\PDO
  • 继承自: AbilityBaseObject
  • 类型: 纯静态类
  • 是否可继承: 是

数据库连接池的全局管理中心,通过静态属性维护所有 Driver 实例,支持在运行时动态注册和切换活跃数据库连接。所有方法均为静态方法,全局共享状态。

核心概念

drivers:     default → Driver(主库)
             slave   → Driver(只读从库)
             log     → Driver(日志库)
useDriver:   → Driver(主库)  ← 当前活跃连接

getUseDriver() 在无活跃连接时自动调用 switchToDefaultDriver(),回退优先级:$defaultDriver → 名为 "default" 的驱动 → 第一个注册的驱动。

属性

属性类型默认可见性说明
$driversarray[]private static数据库驱动列表,键为驱动名,值为 Driver 实例
$useDriverDrivernullprivate static当前使用的数据库驱动
$defaultDriverDrivernullprivate static默认数据库驱动

方法速查表

方法作用
addDriver($driver, $name, $isDefault)添加驱动
useDriver($name)切换使用指定驱动
getUseDriver()获取当前使用的驱动
getDrivers()获取驱动列表
setDefaultDriver($name)设置默认驱动
getDefaultDriver()获取默认驱动
switchToDefaultDriver()切换回默认驱动

方法

addDriver($driver, $name = "default", $isDefault = false) — 添加驱动

参数

参数类型默认说明
$driverDriver驱动实例
$namestring"default"驱动在列表中的键名
$isDefaultboolfalse是否设为默认驱动,为 true 时同步 setDefaultDriver()

返回值

  • 无。

示例

php
Connections::addDriver(new Driver($dsn, $user, $pass), 'master', true);
Connections::addDriver(new Driver($dsn2, $user2, $pass2), 'slave');

useDriver($name) — 使用数据库驱动

参数

参数类型默认说明
$namestring驱动列表键名

返回值

  • bool:恒为 true

异常

  • Error:指定驱动不存在时抛出,错误码 databaseStaticDriverNotExist:500

getUseDriver() — 获取当前正在使用的驱动

无活跃连接时自动切换回默认驱动。

参数

  • 无。

返回值

  • Driver:当前驱动实例。

getDrivers() — 获取数据库驱动列表

参数

  • 无。

返回值

  • array:全部驱动,键为驱动名。

setDefaultDriver($name = "default") — 设置默认驱动

参数

参数类型默认说明
$namestring"default"驱动列表键名

返回值

  • 无。

异常

  • Error:指定驱动不存在时抛出,错误码 setDefaultDatabaseDriverError:500

getDefaultDriver() — 获取当前设置的默认驱动

参数

  • 无。

返回值

  • Driver\|null:默认驱动实例。

switchToDefaultDriver() — 切换回默认驱动

回退优先级:$defaultDriver → 名为 "default" 的驱动 → 第一个注册的驱动。

参数

  • 无。

返回值

  • 无。

异常

  • Error:没有任何已注册驱动时抛出,错误码 switchToDefaultDatabaseDriverError:500

示例

php
// 运行时切到从库读
Connections::useDriver('slave');
$users = DB::table('users')->get();

// 切回主库写
Connections::switchToDefaultDriver();
DB::table('users')->insert($data);