Yii 框架多个数据库操作指南 (yii 多数据库)
Yii框架多个数据库操作指南
Yii框架是一款高效、安全、灵活的开源Web应用程序开发框架,拥有完善的文档和丰富的社区资源,广受开发者的欢迎和喜爱。Yii框架的核心思想是快速开发,高效性能,易用性和可扩展性。其中,在多个数据库操作方面,Yii框架也提供了很好的支持,本篇文章将详细介绍Yii框架中多个数据库操作指南。
一、操作多个数据库
在实际应用中,往往需要同时连接多个数据库,例如一个系统的用户信息储存在一个数据库,而另一个数据储存了业务数据,或者说一个用户应用程序在地理位置不同的数据中心中分别连接了不同的数据库,这时候Yii框架可以帮我们轻松完成这些极具挑战性的任务。
1.连接配置
Yii框架中多个数据库操作之前需先设置不同的数据库连接arrays配置,具体代码如下:
return [
‘components’ => [
‘db’ => [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=dbname’,
‘username’ => ‘root’,
‘password’ => ”,
‘charset’ => ‘utf8’,
],
‘db2’ => [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=dbname2’,
‘username’ => ‘root’,
‘password’ => ”,
‘charset’ => ‘utf8’,
],
],
];
2.使用不同连接
在使用不同的连接进行操作时,我们需要在执行操作时明确指定应该使用的连接名,只需在查询或命令对象上调用wiyhDb():
$results = Yii::$app->db->createCommand(‘SELECT * FROM user’)->queryAll();
$results2 = Yii::$app->db2->createCommand(‘SELECT * FROM order’)->queryAll();
二、进行分布式、分表分库操作
对于较大的数据量和高并发的系统来说,我们往往需要对需要对数据库进行分布式、分表分库的操作,一方面可以避免单一节点性能瓶颈,另一方面也方便更好的调度、扩展等,这时候Yii框架也提供了很好的支持,使我们可以容易地把一张表分成多个分表分散到不同的门店中。
1.进行分表分库操作
在代码中进行分表分库操作时,我们需要做一些配置。在配置文件中定义不同的数据库连接数组:
return [
‘components’ => [
‘db’ => [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=dbname’,
‘username’ => ‘root’,
‘password’ => ”,
‘charset’ => ‘utf8’,
],
‘db_order’ => [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=dbname2’,
‘username’ => ‘root’,
‘password’ => ”,
‘charset’ => ‘utf8’,
],
],
];
然后,我们可以通过以下代码进行分表操作:
Yii::$app->db->createCommand()->insert(‘t_order_’.($id%10), [
‘id’ => $id,
‘customer_id’ => $customerId,
‘amount’ => $amount,
])->execute();
在上述代码中,我们对分表进行了分表分库操作,其中insert()方法我们传递分表分库后的表名,这样我们的数据就能分散到不同数据库下不同的表中。
2.进行分布式操作
在分布式数据库中,我们可以建立多个节点,每个节点之间互相独立,例如大型电商网站的订单数据库,就可以在不同的节点根据会员地理位置生成相应的订单数据库,这时候在Yii框架中操作就比较容易了,只需根据MySQL的主从结构在配制文件中定义不同的从库和主库:
return [
‘components’ => [
‘db’ => [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=dbname’,
‘username’ => ‘root’,
‘password’ => ”,
‘charset’ => ‘utf8’,
],
‘db_order’ => [
‘class’ => ‘yii\db\Connection’,
‘dsn’ => ‘mysql:host=localhost;dbname=dbname2’,
‘username’ => ‘root’,
‘password’ => ”,
‘charset’ => ‘utf8’,
‘enableSlaves’ => true,
‘slaveConfig’ => [
‘username’ => ‘root’,
‘password’ => ”,
],
‘separates’ => [
‘table1’ => [
‘master’ => ‘db2’,
‘slaves’ => [
‘db3’,
‘db4’,
]
]
]
],
],
];
通过上述代码中的配制,我们就完成了分布式操作,在代码中执行操作时只需要指定配置文件的相应连接即可操作不同数据库。
三、使用事务
在 Yii 中,您可以通过 $ db->beginTransaction() 开始事务。在事务中执行的所有 SQL 查询都要使用同一数据库连接,这可以通过更改 $ command->db 属性或使用 $ db->createCommand() 方法来实现。
try {
$transaction = Yii::$app->db->beginTransaction();
Yii::$app->db->createCommand($sql1)->execute();
Yii::$app->db->createCommand($sql2)->execute();
// … executing other SQL statements …
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
// … executing other exception handling methods …
}
到这里, 就结束了,如有不足,请大家多多指教,谢谢!