数据库配置
Viswoole 的数据库配置文件位于 config/database.php,采用通道(Channel)机制管理多个数据库连接。
配置文件结构
php
<?php
// config/database.php
use Viswoole\Database\Channel\PDO\PDOChannel;
use Viswoole\Database\Facade\Db;
return [
'default' => env('DATABASE_DEFAULT', 'default'),
'debug' => env('app_debug', true),
'info_save_manner' => Db::DEBUG_SAVE_CONSOLE | Db::DEBUG_SAVE_LOGGER,
'channels' => [
'default' => [
'driver' => PDOChannel::class,
'options' => [
'host' => env('DATABASE_HOST', '127.0.0.1'),
'port' => (int)env('DATABASE_PORT', 3306),
'database' => env('DATABASE_NAME', ''),
'username' => env('DATABASE_USER', 'root'),
'password' => env('DATABASE_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
]
]
]
];配置项说明
顶层配置
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
default | string | default | 默认使用的数据库通道名称 |
debug | bool | true | 是否开启调试模式,控制 SQL 日志输出 |
info_save_manner | int | 混合输出 | 调试信息的保存方式,支持位运算组合 |
调试信息保存方式
info_save_manner 支持以下常量,可通过位运算(|)组合使用:
| 常量 | 值 | 说明 |
|---|---|---|
Db::DEBUG_SAVE_CONSOLE | 控制台输出 | 将 SQL 日志输出到终端控制台 |
Db::DEBUG_SAVE_LOGGER | 日志记录 | 将 SQL 日志写入日志文件 |
php
// 仅控制台输出
'info_save_manner' => Db::DEBUG_SAVE_CONSOLE,
// 仅写入日志
'info_save_manner' => Db::DEBUG_SAVE_LOGGER,
// 同时输出到控制台和日志(推荐开发环境使用)
'info_save_manner' => Db::DEBUG_SAVE_CONSOLE | Db::DEBUG_SAVE_LOGGER,通道配置 (channels)
每个通道是一个独立的数据库连接配置,包含驱动和连接选项。
通道结构
| 配置项 | 类型 | 说明 |
|---|---|---|
driver | string | 驱动类名,如 PDOChannel::class |
options | array | 数据库连接参数 |
PDO 连接选项
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
host | string | 127.0.0.1 | 数据库主机地址 |
port | int | 3306 | 数据库端口 |
database | string | (必填) | 数据库名称 |
username | string | root | 连接用户名 |
password | string | `` | 连接密码 |
charset | string | utf8mb4 | 字符集 |
collation | string | utf8mb4_unicode_ci | 排序规则 |
环境变量
建议将敏感信息通过 .env 文件配置:
yaml
# .env
DATABASE_DEFAULT=default
DATABASE_HOST=127.0.0.1
DATABASE_PORT=3306
DATABASE_NAME=my_app
DATABASE_USER=root
DATABASE_PASSWORD=your_password
app_debug=true多通道配置
Viswoole 支持配置多个数据库通道,适用于读写分离、多数据库等场景。
php
return [
'default' => env('DATABASE_DEFAULT', 'write'),
'channels' => [
// 主库 - 写操作
'write' => [
'driver' => PDOChannel::class,
'options' => [
'host' => env('DB_WRITE_HOST', '192.168.1.10'),
'port' => (int)env('DB_WRITE_PORT', 3306),
'database' => env('DATABASE_NAME', 'app'),
'username' => env('DB_WRITE_USER', 'writer'),
'password' => env('DB_WRITE_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
]
],
// 从库 - 读操作
'read' => [
'driver' => PDOChannel::class,
'options' => [
'host' => env('DB_READ_HOST', '192.168.1.20'),
'port' => (int)env('DB_READ_PORT', 3306),
'database' => env('DATABASE_NAME', 'app'),
'username' => env('DB_READ_USER', 'reader'),
'password' => env('DB_READ_PASSWORD', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
]
],
]
];切换通道
在代码中通过 Db::channel() 方法切换数据库通道:
php
use Viswoole\Database\Facade\Db;
// 使用默认通道查询
$users = Db::table('users')->select();
// 切换到 read 通道执行读操作
$users = Db::channel('read')
->table('users')
->where('status', 1)
->select();
// 切换到 write 通道执行写操作
Db::channel('write')
->table('users')
->insert(['name' => '新用户']);在模型中指定通道
ORM 模型可以通过 $channelName 属性指定使用的数据库通道:
php
namespace App\Model;
use Viswoole\Database\Model;
class UsersModel extends Model
{
protected string $table = 'users';
protected string $pk = 'id';
// 指定使用 read 通道
protected ?string $channelName = 'read';
}