活動記錄提供了用於訪問資料庫的面向對象的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 來查詢數據。
一個共同的任務是通過主鍵值查詢或一組列的值,這就是為什麼 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 = '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); }
要刪除單行數據,應該 -
-
檢索活動記錄(Active Record)實例
-
調用 yii\db\ActiveRecord::delete() 方法
第1步 - 修改 actionTestDb() 方法,並使用以下代碼。
public function actionTestDb() { $user = MyUser::findOne(2); if($user->delete()) { echo "User ID => 2 is deleted"; } }
第3步 - 也可以調用 yii\db\ActiveRecord::deleteAll() 方法刪除多行數據,例如。
public function actionTestDb() { MyUser::deleteAll('id >= 20'); }