Yii活動記錄(Active Record)


活動記錄提供了用於存取資料庫的物件導向的API。Active Record類與資料庫表關聯。
Yii提供了以下關聯式資料庫活動記錄支援 -
  • 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+
(在本例中的模型是 MyUser)為一個單獨的資料庫表宣告一個Active Record類之後,應該按照以下步驟來查詢資料 -
  • 建立一個新的查詢物件,使用 yii\db\ActiveRecord::find() 方法。
  • 構建查詢物件
  • 呼叫一個jquery方法來檢索資料
第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);echo '<hr/>';
   // return the number of users
   // SELECT COUNT(*) FROM `user`
   $users = MyUser::find()
      ->count();
   var_dump($users);echo '<hr/>';
   // 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步 - 在瀏覽器開啟URL地址:http://localhost:8080/index.php?r=site/test-db ,會看到輸出如下圖所示。
Yii活動記錄
一個共同的任務是通過主鍵值查詢或一組列的值,這就是為什麼 Yii 提供以下方法 -
  • yii\db\ActiveRecord::findOne() ? 返回一個活動記錄(Active Record)範例

  • yi\db\ActiveRecord::findAll() ? 返回 ActiveRecord 的範例陣列

如下範例 ?

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 = '[email protected]';
   $user->save();
   var_dump($user->attributes);
   
   // update an existing row of data
   $user = MyUser::findOne(['name' => 'MyCustomUser2']);
   $user->email = '[email protected]';
   $user->save();
   var_dump($user->attributes);
}
第2步 - 在瀏覽器開啟URL地址: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 "User ID => 2 is deleted";
   } 
}
第2步 - 在瀏覽器開啟URL地址:http://localhost:8080/index.php?r=site/test-db ,會看到輸出如下圖所示。
Yii活動記錄
第3步 - 也可以呼叫 yii\db\ActiveRecord::deleteAll() 方法刪除多行資料,例如。
public function actionTestDb() {
    MyUser::deleteAll('id >= 20');
}