Webman默认不带数据库组件,必须手动安装illuminate/database才能使用ORM;不安装则support\Model无法实例化,模型操作直接报错。

Webman 默认不带数据库组件,必须手动安装 illuminate/database 才能用 ORM;直接写原生 mysqli 或 PDO 也能连,但会失去模型、查询构造器、自动时间戳等能力。
安装 illuminate/database 组件
Webman 的数据库支持依赖 Laravel 的底层组件,不是开箱即用。不装这个包,support\Model 类根本无法实例化,模型操作会直接报错。
- 在项目根目录执行:
composer require illuminate/database illuminate/pagination illuminate/events symfony/var-dumper - 注意不要加
-W(已过时),新版 Composer 会自动处理依赖冲突 - 装完后清下 Composer 自动加载缓存:
composer dump-autoload - 如果提示
Class support\Model not found,说明webman/support包没装或版本不匹配,需检查composer.json中webman/support是否存在且 >=1.5.0
配置 config/database.php
Webman 没有 .env 文件默认支持,数据库配置全靠 config/database.php 返回数组。这个文件必须存在且返回合法结构,否则 Model 初始化时会抛出 InvalidArgumentException。
- 确保
'default' => 'mysql'和connections.mysql键都存在 -
charset建议设为'utf8mb4',而非'utf8',避免 emoji 或四字节字符截断 -
prefix如果设为空字符串,别漏掉引号:'prefix' => '',设成null会触发 PDO 驱动异常 - 连接超时参数要显式写进
options:例如\PDO::ATTR_TIMEOUT => 3,否则协程环境下可能卡住不释放连接
创建模型并指定表与主键
Webman 的模型继承自 support\Model,它底层调用的是 illuminate/database 的 Builder,所以 Eloquent 的大部分行为都可用,但部分高级特性(如软删除、观察者)需自行注册事件监听器。
立即学习“PHP免费学习笔记(深入)”;
- 模型文件放在
app/model/下,类名首字母大写,文件名必须匹配,例如User.php→class User extends Model -
$table属性必须显式声明,不写会默认取类名复数(User→users),但 Webman 不自动加载复数规则,容易错配 -
$primaryKey如果不是id,一定要改,否则find()、update()全部失效 -
$timestamps = false是常见选择,因为很多老表没有created_at/updated_at字段;设为true却无对应字段会导致插入失败
连接池不是默认开启的
Webman 基于 Swoole,单进程多协程,但 illuminate/database 默认仍是每次请求新建 PDO 连接——这在高并发下会迅速耗尽 MySQL 连接数,出现 SQLSTATE[HY000] [1040] Too many connections。
- 官方文档没提连接池,但生产环境必须自己封装或引入第三方池,比如你知识库中提到的
app/tools/MysqlPool - 若用原生
PDO,可配合Swoole\Coroutine\Channel手动管理连接,但得重写getConnection()和releaseConnection() - 切勿在模型里写
new PDO(...),协程间共享资源会引发状态混乱;所有 DB 操作必须走统一连接获取路径 - 连接池配置里的
max_connections值不能盲目设高,要参考 MySQL 的max_connections参数和实际 QPS 压测结果
最常被忽略的一点:Webman 的模型不自动读取 config/database.php 里的连接配置,而是靠 support\Model 内部调用 Container::getInstance()->make('db') 获取连接实例——这意味着如果你没在 config/container.php 中绑定 db 服务,或者绑错了类,模型就会静默使用默认空连接,查不出数据也不报错。



















