- Yii 教程
 - Yii - 主页
 - Yii - 概述
 - Yii - 安装
 - Yii - 创建页面
 - Yii - 应用程序结构
 - Yii - 入口脚本
 - Yii - 控制器
 - Yii - 使用控制器
 - Yii - 使用动作
 - Yii - 模型
 - Yii - 小部件
 - Yii - 模块
 - Yii - 视图
 - Yii - 布局
 - Yii - 资产
 - Yii - 资产转换
 - Yii - 扩展
 - Yii - 创建扩展
 - Yii - HTTP 请求
 - Yii - 响应
 - Yii - URL 格式
 - Yii - URL 路由
 - Yii - URL 规则
 - Yii - HTML 表单
 - Yii - 验证
 - Yii - 临时验证
 - Yii - AJAX 验证
 - Yii - 会话
 - Yii - 使用闪存数据
 - Yii - cookie
 - Yii - 使用 Cookie
 - Yii - 文件上传
 - Yii - 格式化
 - Yii - 分页
 - Yii - 排序
 - Yii - 属性
 - Yii - 数据提供者
 - Yii - 数据小部件
 - Yii - 列表视图小部件
 - Yii - GridView 小部件
 - Yii - 活动
 - Yii - 创建事件
 - Yii - Behave
 - Yii - 创建Behave
 - Yii - 配置
 - Yii - 依赖注入
 - Yii - 数据库访问
 - Yii - 数据访问对象
 - Yii - 查询生成器
 - Yii - 活动记录
 - Yii - 数据库迁移
 - Yii - 主题化
 - Yii - RESTful API
 - Yii - RESTful API 的实际应用
 - Yii - 字段
 - Yii - 测试
 - Yii - 缓存
 - Yii - 片段缓存
 - Yii - 别名
 - Yii - 日志记录
 - Yii - 错误处理
 - Yii - 身份验证
 - Yii - 授权
 - Yii - 本地化
 - Yii-Gii
 - Gii – 创建模型
 - Gii – 生成控制器
 - Gii – 生成模块
 
- Yii 有用的资源
 - Yii - 快速指南
 - Yii - 有用的资源
 - Yii - 讨论
 
Yii - 活动记录
Active Record 提供了用于访问数据的面向对象的 API。Active Record 类与数据库表相关联。
Yii 为以下关系数据库提供 Active Record 支持 -
- MySQL 4.1 或更高版本
 - SQLite 2 和 3:
 - PostgreSQL 7.3 或更高版本
 - Microsoft SQL Server 2008 或更高版本
 - CUBRID 9.3 或更高版本
 - 甲骨文
 - 弹性搜索
 - 狮身人面像
 
此外,Active Record 类支持以下NoSQL数据库 -
- Redis 2.6.12 或更高版本
 - MongoDB 1.3.0 或更高版本
 
为单独的数据库表声明 Active Record 类(在我们的例子中为MyUser模型)后,您应该按照以下步骤从中查询数据 -
- 使用 yii\db\ActiveRecord::find() 方法创建一个新的查询对象。
 - 构建查询对象。
 - 调用查询方法来检索数据。
 
步骤 1 - 以这种方式修改actionTestDb()方法。
public function actionTestDb() {
   // return a single user whose ID is 1
   // SELECT * FROM `user` WHERE `id` = 1
   $user = MyUser::find()
      ->where(['id' => 1])
      ->one();
   var_dump($user);
   // return the number of users
   // SELECT COUNT(*) FROM `user`
   $users = MyUser::find()
      ->count();
   var_dump($users);
   // return all users and order them by their IDs
   // SELECT * FROM `user` ORDER BY `id`
   $users = MyUser::find()
      ->orderBy('id')
      ->all();
   var_dump($users);
}
上面给出的代码展示了如何使用ActiveQuery来查询数据。
步骤 2 - 转到http://localhost:8080/index.php?r=site/test-db,您将看到以下输出。
通过主键值或一组列值查询是一项常见任务,这就是 Yii 提供以下方法的原因 -
yii\db\ActiveRecord::findOne() - 返回单个 Active Record 实例
yi\db\ActiveRecord::findAll() - 返回 Active Record 实例的数组
示例-
public function actionTestDb() {
   // returns a single customer whose ID is 1
   // SELECT * FROM `user` WHERE `id` = 1
   $user = MyUser::findOne(1);
   var_dump($user);
   // returns customers whose ID is 1,2,3, or 4
   // SELECT * FROM `user` WHERE `id` IN (1,2,3,4)
   $users = MyUser::findAll([1, 2, 3, 4]);
   var_dump($users);
   // returns a user whose ID is 5
   // SELECT * FROM `user` WHERE `id` = 5
   $user = MyUser::findOne([
      'id' => 5
   ]);
   var_dump($user);
}
将数据保存到数据库
要将数据保存到数据库,您应该调用yii\db\ActiveRecord::save()方法。
步骤 1 - 以这种方式修改actionTestDb()方法。
public function actionTestDb() {
   // insert a new row of data
   $user = new MyUser();
   $user->name = 'MyCustomUser2';
   $user->email = 'mycustomuser@gmail.com';
   $user->save();
   var_dump($user->attributes);
   
   // update an existing row of data
   $user = MyUser::findOne(['name' => 'MyCustomUser2']);
   $user->email = 'newemail@gmail.com';
   $user->save();
   var_dump($user->attributes);
}
步骤 2 - 转到http://localhost:8080/index.php?r=site/test-db,您将看到以下输出。
要删除单行数据,您应该 -
检索 Active Record 实例
调用yii\db\ActiveRecord::delete()方法
步骤 1 - 以这种方式修改actionTestDb()方法。
public function actionTestDb() {
   $user = MyUser::findOne(2);
   if($user->delete()) {
      echo "deleted";
   } 
}
步骤 2 - 在 Web 浏览器的地址栏中输入http://localhost:8080/index.php?r=site/test-db,您将看到以下输出。
步骤 3 -例如,您还可以调用yii\db\ActiveRecord::deleteAll()方法来删除多行数据。
public function actionTestDb() {
    MyUser::deleteAll('id >= 20');
}