yii 没有 yii3 版本,官方已终止其开发;当前最新稳定版为 yii 2.0.x,数据库配置需在 components 中显式声明 yii\db\connection,支持多库命名与指定,charset 推荐 utf8mb4,gii 生成模型时须手动选择连接 id。

Yii 没有官方发布的 Yii3 版本。截至 2026 年 7 月,Yii 官方最新稳定版本是 Yii 2.0.x(长期维护中),而 Yii 3.0 从未正式发布 —— 它曾于 2020 年初作为实验性重构项目短暂出现(代号 “Yii Next”),但很快被官方叫停并明确宣布:不再开发 Yii 3,转而聚焦 Yii 2 的持续优化与现代化支持(如 PHP 8+、Composer 2、PSR 标准等)。
因此,“Yii3 数据库连接怎么改” 这一前提不成立。你实际面对的只有两种情况:
- ✅ 从 Yii 1.1 升级到 Yii 2.0(这是真实、广泛存在的升级路径)
- ❌ 不存在“升级到 Yii 3”的操作,也没有 Yii 3 的数据库配置规范。
下面直接说明 Yii 1.1 → Yii 2.0 数据库连接的关键改动,聚焦实用、易踩坑点:
数据库组件注册方式变了
Yii 1.1 中通过 protected/config/main.php 的 'components' => ['db' => [...]] 配置,但 db 是全局单例且隐式绑定。
Yii 2.0 要求显式声明为 应用组件(Application Component),且必须在 config/web.php 或 config/main.php 的 'components' 数组里定义:
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=myapp',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
],
],
⚠️ 注意:
'charset' => 'utf8'在 Yii 2.0 中不够安全,推荐utf8mb4;PDO 扩展(如pdo_mysql)必须启用,否则启动即报错。
多数据库支持更清晰,但写法不同
Yii 1.1 多库需手动 new Connection 或扩展 CDbConnection。
Yii 2.0 支持多个命名连接,只需在 components 里加多个键:
'db' => [ /* 主库 */ ], 'db2' => [ /* 日志库 */ ], 'db3' => [ /* 统计库 */ ],
模型中指定用哪个库:
- ActiveRecord 模型里重写
getDb()方法:public static function getDb() { return \Yii::$app->db2; // 显式返回对应组件 } - 查询构造器(Query)中指定:
$rows = (new \yii\db\Query()) ->from('log_table') ->all(\Yii::$app->db2); // 第二个参数传连接实例
Gii 生成模型时要选对连接 ID
Yii 1.1 的 Gii 不支持多库切换;Yii 2.0 的 Gii Model Generator 页面有 “Database Connection ID” 下拉框,默认是 db,若用 db2,必须手动改成 db2,否则生成的模型仍连主库。
原生 SQL 和事务写法微调
Yii 1.1 用 $connection->createCommand($sql)->queryAll();
Yii 2.0 推荐统一走 Yii::$app->db->createCommand($sql),且支持链式与参数绑定:
Yii::$app->db->createCommand('INSERT INTO user (name) VALUES (:name)')
->bindValue(':name', $name)
->execute();
事务也更简洁:
$transaction = Yii::$app->db->beginTransaction();
try {
Yii::$app->db->createCommand(...)->execute();
Yii::$app->db2->createCommand(...)->execute();
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
throw $e;
}
不复杂但容易忽略











