简述
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 类(在我们的例子中为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 提供以下方法的原因 -
示例-
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);
}