CodeIgniter4的default组由Database.php中$defaultGroup属性显式指定,而非文件名或位置;自定义组是$DB数组中除default外的其他键名,必须显式传参调用。

CodeIgniter4 的数据库配置支持多组(groups),核心区分点在于“是否被框架默认识别为 default”,而不是文件名或位置。它不靠命名自动判断,而是由 app/Config/Database.php 中的 $defaultGroup 属性明确指定。
default 组是显式指定的主组
在 app/Config/Database.php 中,你会看到类似这样的定义:
$defaultGroup = 'default';
这个字符串值(比如 'default'、'production' 甚至 'legacy')就是当前生效的 default 组名称。CI4 所有未显式指定组名的数据库操作(如 $db = \Config\Database::connect(); 或模型中未传参的 parent::__construct())都会自动使用该组。
也就是说:default 不是固定叫 “default”,而是你写在 $defaultGroup 里的那个名字。
自定义组就是其他任意已定义的组
只要你在 app/Config/Database.php 的 $DB 数组里声明了新键名,它就是自定义组。例如:
-
$DB['default'] = [...];→ 若$defaultGroup === 'default',它就是 default 组 -
$DB['slave'] = [...];→ 自定义只读库组,需显式调用connect('slave') -
$DB['tenant_a'] = [...];→ 多租户场景下的独立连接组 -
$DB['test'] = [...];→ 测试专用组,通常搭配phpunit使用
这些组不会被自动加载,必须通过参数主动选择:\Config\Database::connect('slave') 或 $this->db = $this->load->database('tenant_a', true);(注意 CI4 中 load->database() 已不推荐,应优先用 \Config\Database 静态方式)。
实际使用时的关键区别
- 连接获取方式不同:default 组可省略参数;自定义组必须传入组名字符串
-
配置优先级一致:无论 default 还是自定义组,都从同一份
Database.php加载,没有额外的文件或路径规则 -
环境适配靠逻辑判断:你可以根据
ENVIRONMENT常量动态赋值$defaultGroup,比如开发时设为'test',线上设为'default',实现无缝切换 -
模型默认绑定 default 组:Model 类若未在构造函数中指定
$DBGroup属性,就会使用当前$defaultGroup对应的连接


















