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 '


';
// return the number of users
// SELECT COUNT(*) FROM `user`
$users = MyUser::find()
->count();
var_dump($users);echo '
';
// 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 ,會看到輸出如下圖所示。
Yii活動記錄(Active

要刪除單行數據,應該 -

  • 檢索活動記錄(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');
}