建议ThinkOrm.php中的定时器,增加对配置项“default”限制。
否则,如果设置'default' => 'mongo',只能注释掉mysql配置项,不然会报错。
======================= 问题更新 ==========================
think-orm的配置文件如下(代码二)所示,数据库默认采用mongo,此时,并未使用到mysql,所以mysql的配置项不一定是正确的,但又不想注释或删掉mysql配置。而ThinkOrm.php并未判断当前默认使用的是哪个数据库,导致只要有mysql配置项就去连接。
建议将/vendor/webman/think-orm/src/ThinkOrm.php里代码改成如下(代码一)所示
<?php
namespace Webman\ThinkOrm;
use Webman\Bootstrap;
use Workerman\Timer;
use think\facade\Db;
class ThinkOrm implements Bootstrap
{
// 进程启动时调用
public static function start($worker)
{
// 配置
Db::setConfig(config('thinkorm'));
// 维持mysql心跳
if ($worker) {
Timer::add(55, function () {
$default = config('thinkorm.default', '');
$connections = config('thinkorm.connections', []);
if($connections[$default]['type'] == 'mysql') {
Db::connect($default)->query('select 1');
}
});
}
}
}
<?php
return [
'default' => 'mongo',
'connections' => [
'mysql' => [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'test',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '123456',
// 数据库连接端口
'hostport' => '3306',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => '',
// 断线重连
'break_reconnect' => true,
// 关闭SQL监听日志
'trigger_sql' => false,
],
'mongo' => [
// 数据库类型
'type' => 'mongo',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'test',
// 是否是复制集
'is_replica_set' => false,
// 用户名
'username' => '',
// 密码
'password' => '',
// 端口
'hostport' => '27017',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 主键名
'pk' => '_id',
// 主键类型
'pk_type' => 'ObjectID',
// 数据库表前缀
'prefix' => 'my_',
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => false,
// 开启字段缓存
'fields_cache' => false,
// 监听SQL
'trigger_sql' => true,
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => 'Y-m-d H:i:s',
// 是否_id转换为id
'pk_convert_id' => true,
// typeMap
'type_map' => ['root' => 'array', 'document' => 'array'],
],
],
];
没看明白你说的是什么问题,你说的 “增加对配置项“default”限制” 是在哪个文件哪个位置加?报错是具体什么报错?
webman/think-orm有个定时器定时发送心跳用来mysql连接,文件为 https://github.com/webman-php/think-orm/blob/main/src/ThinkOrm.php ,内容如下
问题描述已重新整理
通过 thinkorm.default 判断类型不严谨,不用的数据库配置注释掉吧