我有三个数据库,每个数据库都有相同字段的相同表,但我不知道如何在Yii中同时获取所有三个数据库中的所有记录。
请帮忙
答案 0 :(得分:11)
1.我们将从配置数据库连接开始。打开protected / config / main.php并按照指南中的描述定义主连接:
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=db1',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
2.然后复制它,将'db'组件重命名为'db2'并相应地更改连接字符串。此外,您需要添加类名,如下所示:
'db2'=>array(
'class'=>'CDbConnection',
'connectionString' => 'mysql:host=localhost;dbname=db2',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
3.然后复制它,将'db'组件重命名为'db3'并相应地更改连接字符串。此外,您需要添加类名,如下所示:
'db2'=>array(
'class'=>'CDbConnection',
'connectionString' => 'mysql:host=localhost;dbname=db2',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
4.就是这样。现在,您有两个数据库连接,可以将它们与DAO和查询构建器一起使用,如下所示:
$db1Rows = Yii::app()->db->createCommand($sql)->queryAll();
$db2Rows = Yii::app()->db2->createCommand($sql)->queryAll();
$db3Rows = Yii::app()->db2->createCommand($sql)->queryAll();
答案 1 :(得分:6)
只需将新数据库连接添加到config / main.php
即可 'db1'=>array(
'connectionString' => 'mysql:host=localhost;dbname=database1',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
'db2'=>array(
'connectionString' => 'mysql:host=localhost;dbname=database2',
'username' => 'root',
'password' => '',
'class'=>'CDbConnection', // DO NOT FORGET THIS!
),
现在您可以像这样连接到您的数据库:
Yii::app()->db1 ...
Yii::app()->db2 ...
查看这篇文章以获得更多解释:
http://www.yiiframework.com/wiki/123/multiple-database-support-in-yii/
和此:
http://www.yiiframework.com/wiki/78/multiple-databases-and-multiple-domains/