Ali*_*our 104
首先,您需要配置您的数据库,如下所示:
return [
'components' => [
'db1' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db1name', //maybe other dbms such as psql,...
'username' => 'db1username',
'password' => 'db1password',
],
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=db2name', // Maybe other DBMS such as psql (PostgreSQL),...
'username' => 'db2username',
'password' => 'db2password',
],
],
];
Run Code Online (Sandbox Code Playgroud)
然后你可以简单地说:
// To get from db1
Yii::$app->db1->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll()
// To get from db2
Yii::$app->db2->createCommand((new \yii\db\Query)->select('*')->from('tbl_name'))->queryAll()
Run Code Online (Sandbox Code Playgroud)
如果您使用的是活动记录模型,则可以在模型中定义:
public static function getDb() {
return Yii::$app->db1;
}
//Or db2
public static function getDb() {
return Yii::$app->db2;
}
Run Code Online (Sandbox Code Playgroud)
然后:
如果已db1
在getDb()
方法中设置,则将从中获取结果db1
,依此类推.
ModelName::find()->select('*')->all();
Run Code Online (Sandbox Code Playgroud)
DrB*_*row 19
只是添加:我按照提供的答案但仍然出现错误:"未知组件ID:db"
经过一些测试,这里就是我发现:该功能getDB只调用后建立连接到数据库.因此,您无法在配置文件中删除或重命名"db".相反,你需要让'db'的调用正常进行,然后再覆盖它.
解决方案(对我来说)如下:
在下面config/web.php
添加第二个数据库配置db
,如下所示:
'db' => require(__DIR__ . '/db.php'),
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=name',
'username' => 'user',
'password' => 'password',
'charset' => 'utf8',
'on afterOpen' => function ($event) {
$event->sender->createCommand("SET time_zone = '+00:00'")->execute();
},
],
Run Code Online (Sandbox Code Playgroud)
不要重命名db
.找不到db会导致错误.你可以db2
说出你喜欢的名字.
现在在模型中,添加以下代码:
class ModelNameHere extends \yii\db\ActiveRecord {
// add the function below:
public static function getDb() {
return Yii::$app->get('db2'); // second database
}
Run Code Online (Sandbox Code Playgroud)
现在,它将覆盖默认db
配置.
我希望能帮助别人.
注意:您可以将配置包含db2
在另一个文件中,但不能将其包含在db.php
文件中(显然).相反,创建一个名为的文件db2.php
并像以下一样调用它db
:
'db' => require(__DIR__ . '/db.php'),
'db2' => require(__DIR__ . '/db2.php'),
Run Code Online (Sandbox Code Playgroud)
谢谢
归档时间: |
|
查看次数: |
40486 次 |
最近记录: |