Yii - Active Record
Active Record 提供了用于访问数据的面向对象 API。一个 Active Record 类与一个数据库表相关联。
Yii 为以下关系数据库提供 Active Record 支持 −
- MySQL 4.1 或更高版本
- SQLite 2 和 3:
- PostgreSQL 7.3 或更高版本
- Microsoft SQL Server 2008 或更高版本
- CUBRID 9.3 或更高版本
- Oracle
- ElasticSearch
- Sphinx
此外,Active Record 类还支持以下 NoSQL 数据库 −
- Redis 2.6.12 或更高版本
- MongoDB 1.3.0 或更高版本
声明 Active Record 后class(本例中为 MyUser 模型)作为单独的数据库表,则应按照以下步骤从中查询数据 −
- 使用 yii\db\ActiveRecord::find() 方法创建一个新的查询对象。
- 构建查询对象。
- 调用查询方法来检索数据。
步骤 1 − 以这种方式修改 actionTestDb() 方法。
public function actionTestDb() { // 返回 ID 为 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 实例数组
Example −
public function actionTestDb() { // 返回 ID 为 1 的单个客户 // SELECT * FROM `user` WHERE `id` = 1 $user = MyUser::findOne(1); var_dump($user); // 返回 ID 为 1、2、3 或 4 的客户 // SELECT * FROM `user` WHERE `id` IN (1,2,3,4) $users = MyUser::findAll([1, 2, 3, 4]); var_dump($users); // 返回 ID 为 5 的用户 // SELECT * FROM `user` WHERE `id` = 5 $user = MyUser::findOne([ 'id' => 5 ]); var_dump($user); }
将数据保存到数据库
要将数据保存到数据库,您应该调用 yii\db\ActiveRecord::save() 方法。
步骤 1 − 以这种方式修改 actionTestDb() 方法。
public function actionTestDb() { // 插入一行新数据 $user = new MyUser(); $user->name = 'MyCustomUser2'; $user->email = 'mycustomuser@gmail.com'; $user->save(); var_dump($user->attributes); // 更新现有行的数据 $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'); }