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或更高版本
  • 神谕
  • ElasticSearch
  • 狮身人面像

另外,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 ,您将看到以下输出。

将数据保存到数据库

要删除一行数据,你应该 -

  • 检索活动记录实例

  • 调用 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');
}