Yii Active Record
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 数据库:
在为单独的数据库表声明了一个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实例
-
yii\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 datauser = 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');
}