yii 框架目前没有官方发布的 yii 3.0 版本,所谓“yii 3.0 的 activerecord”属于误传;官方仅维护 yii 1.1(已停止新功能开发)和 yii 2.0(当前 lts 版本),并转向 fusion 和 yii modern 等新架构,不再提供 activerecord。

Yii 框架目前没有官方发布的 Yii 3.0 版本。截至 2026 年 7 月,Yii 官方仅维护两个主版本:
- Yii 1.1:已停止新功能开发,仅提供安全补丁和关键修复(最后稳定版为 1.1.26);
- Yii 2.0:当前主力长期支持(LTS)版本,仍在持续更新(最新稳定版为 2.0.49+,兼容 PHP 8.0–8.3);
-
Yii 3.0 从未发布 —— 社区曾有实验性分支(如
yiisoft/yii3),但该仓库已于 2022 年归档,官方明确转向 Fusion 和 Yii Modern 等新架构探索项目,不叫 Yii 3.0,也不兼容原有 ActiveRecord 模式。
因此,“Yii 3.0 的 ActiveRecord”属于误传,实际不存在。下面只对比 Yii 1.1 和 Yii 2.0 中 ActiveRecord 的核心用法差异,聚焦可落地的写法、关键变化和迁移要点:
Yii 1.1 的 ActiveRecord 写法特点
- 类名带前缀
C,继承自CActiveRecord - 必须实现
model()静态工厂方法 - 表名通过
tableName()返回,常用{{table}}语法支持表前缀 - 查询主要靠静态方法:
find(),findByPk(),findAll(),count(),updateAll()等 - 验证规则写在
rules()方法里,与模型强绑定
class User extends CActiveRecord
{
public static function model($className = __CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return '{{user}}';
}
public function rules()
{
return array(
array('username, email', 'required'),
array('email', 'email'),
);
}
}
// 查询
$user = User::model()->findByPk(123);
$user->status = 1;
$user->save();
Yii 2.0 的 ActiveRecord 写法特点
- 去掉
C前缀,继承yii\db\ActiveRecord - 不再需要
model()方法,直接用类名调用静态方法 -
tableName()仍需重写,支持{{%user}}语法(%自动替换配置中的tablePrefix) - 查询统一走
find()返回ActiveQuery,支持链式调用 - 保存逻辑由
save()自动判断插入 or 更新(依赖isNewRecord属性) - 验证机制继承自
yii\base\Model,规则写法一致,但底层更灵活
namespace app\models;
use yii\db\ActiveRecord;
class User extends ActiveRecord
{
public static function tableName()
{
return '{{%user}}';
}
public function rules()
{
return [
[['username', 'email'], 'required'],
['email', 'email'],
];
}
}
// 查询与操作
$user = User::findOne(123);
$user->name = 'New Name';
$user->save(); // 自动 update
$newUser = new User();
$newUser->username = 'alice';
$newUser->save(); // 自动 insert
// 链式查询
$activeUsers = User::find()
->where(['status' => 1])
->orderBy('created_at DESC')
->limit(10)
->all();
关键差异速查表
| 功能点 | Yii 1.1 | Yii 2.0 |
|---|---|---|
| 基类 | CActiveRecord |
yii\db\ActiveRecord |
| 工厂方法 | 必须写 model()
|
无需 model(),直接 User::find()
|
| 表名语法 | {{user}} |
{{%user}}(自动注入 prefix) |
| 查询入口 | User::model()->find() |
User::find() |
| 批量插入 | 不内置,需手写 SQL 或扩展 | 支持 createCommand()->batchInsert()
|
| 事务封装 | CActiveRecord::getDb()->beginTransaction() |
Yii::$app->db->beginTransaction() |
| 多数据库支持 | 需手动切换 CActiveRecord::setDbConnection()
|
重写 getDb() 返回不同组件(如 db2) |
| 命名空间与自动加载 | 无命名空间,依赖 import 或 Yii::import()
|
全命名空间,Composer 自动加载 |
补充说明:为什么没有 Yii 3.0 的 ActiveRecord?
Yii 团队在 2021 年后明确将重心转向解耦与现代化架构,例如:
- 将数据库层独立为 yiisoft/db(PDO 抽象)
- 将 ORM 拆分为可选组件,不再强制绑定框架核心
- 新项目推荐使用 Cycle ORM 或 Doctrine DBAL 等更现代方案
- 官方新框架 Fusion 完全不提供 ActiveRecord,而是面向函数式、轻量级服务组合
所以如果你看到“Yii 3.0 ActiveRecord”,大概率是混淆了第三方封装、旧文档残留,或是对 Fusion/Yii Modern 的误读。
不复杂但容易忽略











