我并非100%确定模块是正确的方式。所以我想我会问。我的用例是我有一个相当大的应用程序,它是由oracle DB提供的。
我们还有另一个不是oracle的DB,会参与不同类型的工作和不同的用户组,所以我认为我应该使用一个模块 - 是吗?如果不是,那么实现这种设置的最佳方式是什么?
如果有,有没有办法在我的模块中配置第二个DB,还是应该在主app / config / dp.php文件中完成?
答案 0 :(得分:1)
在config / web.php中添加第二个数据库配置,创建一个名为db2.php的文件并调用它
'db' => require(__DIR__ . '/db.php'),
'db2' => require(__DIR__ . '/db2.php'),
在模型中,
class MyModel extends \yii\db\ActiveRecord {
// add the function below:
public static function getDb() {
return Yii::$app->get('db2'); // second database
}
答案 1 :(得分:1)
一种简单的方法是在每个db中定义两个不同的组件,例如db1 for oracle和db2 for mysql in config / web.php
'components' => [
......
'db1' => [
'class' => 'yii\db\Connection',
'dsn' => 'oci:dbname=//localhost:1521/mydatabase',
'username' => 'scott',
'password' => 'tiger',
'charset' => 'utf8',
],
'db2' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=mydbname',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
并参考Yii :: $ app-> db1或Yii :: $ app-> db2例如:
$count1 = Yii::$app->db1->createCommand('SELECT COUNT(*) FROM post')
->queryScalar();
或
$count2 = Yii::$app->db2->createCommand('SELECT COUNT(*) FROM post')
->queryScalar();
答案 2 :(得分:1)
因为您正在使用 Yii2-Basic应用程序。所以,目录结构就像。
Root Folder
-> assets
-> commands
-> components
-> config
-> console.php
-> db.php
-> params.php
-> web.php
-> controllers
-> mail
.
.
.
您的数据库连接详细信息位于 db.php 中。现在,您希望另一个数据库在您的应用程序中发挥重要作用。别担心。在config
文件夹中的 db2.php 中再创建一个数据库连接详细信息。
<强> db2.php 强>
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=another_database_name',
'username' => 'username',
'password' => 'password',
'charset' => 'utf8',
];
所以,现在目录结构将是:
Root Folder
-> assets
-> commands
-> components
-> config
-> console.php
-> db.php
-> db2.php
-> params.php
-> web.php
-> controllers
-> mail
.
.
.
现在,下一步在应用程序中包含 db2.php 。
打开 web.php 。为db2.php
<?php
$params = require(__DIR__ . '/params.php');
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'components' => [
.
.
.
'db' => require(__DIR__ . '/db.php'),
'db2' => require(__DIR__ . '/db2.php'),
],
];
因此,另一个数据库连接也已成功设置。现在,下一步是使用与另一个数据库连接相关的查询。
$row = Yii::$app->db2->createCommand("SELECT * FROM `table_name`")->queryOne();