2025-12-09 287次浏览

我们高兴地推出 Yii Active Record 的首个稳定版本 —— 这是一款针对 PHP 开发的 Active Record模式实现方案。

该包基于 Yii DB 构建,这意味着它开箱即支持主流关系型数据库:PostgreSQL、MySQL、MSSQL、Oracle、SQLite。

灵活的模型属性处理

  • 动态属性 —— 通过 #[\AllowDynamicProperties] 实现快速原型开发
  • 公共属性
  • 受保护属性 —— 通过取值器 / 赋值器(getters/setters)实现封装
  • 私有属性
  • 魔术属性

强大的关联关系系统

  • 一对一
  • 一对多
  • 多对一
  • 多对多 —— 三种实现方式(关联表、关联模型、键数组)
  • 深度关联 —— 通过中间关联获取关联记录
  • 反向关联
  • 贪婪加载 —— 解决 N+1 查询问题

基于 Trait 的可扩展性

  • ArrayableTrait —— 将模型转换为数组
  • ArrayAccessTrait —— 以数组形式访问属性
  • ArrayIteratorTrait —— 遍历模型属性
  • CustomConnectionTrait —— 自定义数据库连接
  • EventsTrait —— 事件 / 处理器系统
  • FactoryTrait —— 集成 Yii 工厂以实现依赖注入(DI)
  • MagicPropertiesTrait MagicRelationsTrait —— 魔术访问器
  • RepositoryTrait —— 仓储模式

附加功能

  • 乐观锁 —— 通过记录版本控制实现并发控制
  • 依赖注入 —— 支持基于构造函数的注入
  • 灵活的配置 —— 多种方式定义数据库连接

示例

Active Record 类示例:

/**
 * Entity User
 *
 * Database fields:
 * @property int $id
 * @property string $username
 * @property string $email
 **/
#[\AllowDynamicProperties]
final class User extends \Yiisoft\ActiveRecord\ActiveRecord
{
    public function tableName(): string
    {
        return '{{%user}}';
    }
}

及其使用方法:

// Creating a new record
$user = new User();
$user->set('username', 'alexander-pushkin');
$user->set('email', 'pushkin@example.com');
$user->save();

// Retrieving a record
$user = User::query()->findByPk(1);

// Read properties
$username = $user->get('username');
$email = $user->get('email');