访问数据库
PPG007 ... 2023-9-21 About 2 min
# 访问数据库
# MongoDB
# 安装
composer require --prefer-dist yiisoft/yii2-mongodb
1
配置:
'mongodb' => [
'class' => '\yii\mongodb\Connection',
'dsn' => 'mongodb://127.0.0.1:27018/todo',
]
1
2
3
4
2
3
4
# 活动记录
Active Record 提供了一个面向对象的接口, 用以访问和操作数据库中的数据。Active Record 类与数据库表关联,Active Record 实例对应于该表的一行,Active Record 实例的属性表示该行中特定列的值。
为了声明一个 Activate Record 类,需要继承 yii\mongodb\ActiveRecord
类并覆写 getCollection 和 attributes
两个方法。
class Todo extends ActiveRecord
{
public static function getCollection()
{
return 'todo';
}
public function attributes()
{
return [
'_id',
'content',
'createdAt',
'updatedAt',
'userId',
'isDeleted',
'needRemind',
'remindSetting',
];
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
执行查询:
public static function findByUserId($userId = '')
{
$condition = [
'userId' => $userId,
];
return self::findAll($condition);
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# Active Record 的生命周期
实例化生命周期:
- 构造函数。
- init(),触发 EVENT_INIT 事件(在 BaseActivateRecord 基类里)。
查询生命周期:
- 构造函数。
- init(),触发 EVENT_INIT 事件。
- afterFind(),触发 EVENT_AFTER_FIND 事件。
保存数据生命周期:
通过 save 方法插入或更新 Activate Record 实例时,发生以下周期。
- beforeValidate():触发 EVENT_BEFORE_VALIDATE 事件,如果方法返回 false 后面的步骤都会跳过。
- validate():数据验证,返回 false 后面的步骤都会跳过。
- afterValidate():触发 EVENT_AFTER_VALIDATE 事件。
- beforeSave():触发 EVENT_BEFORE_INSERT 或者 EVENT_BEFORE_UPDATE 事件如果方法返回 false 跳过后面的步骤。
- 执行插入或者更新。
- afterSave():触发 EVENT_AFTER_INSERT 或者 EVENT_AFTER_UPDATE 事件。
删除数据生命周期:
- beforeDelete():触发 EVENT_BEFORE_DELETE 事件,如果返回 false 跳过后面的步骤。
- 执行删除。
- afterDelete():触发 EVENT_AFTER_DELETE 事件。
Tips
有的直接操作数据库的方法不会触发生命周期,例如 updateAll、deleteAll 等
# Redis
# 安装
composer require --prefer-dist yiisoft/yii2-redis
1
配置:
'redis' => [
'class' => \yii\redis\Connection::class,
'hostname' => '127.0.0.1',
'port' => '6379',
'database' => 1,
]
1
2
3
4
5
6
2
3
4
5
6
# 使用
可以使用封装好的方法:
$redis = Yii::$app->redis;
$redis->set('a', 123);
return $redis->get('a');
1
2
3
2
3
也可以直接执行命令:
$redis = Yii::$app->redis;
$redis->executeCommand('SET', ['a', '123']);
return $redis->executeCommand('KEYS', ['*']);
1
2
3
2
3