Yii2模块和配置

时间:2016-09-07 14:01:36

标签: php module yii2

我并非100%确定模块是正确的方式。所以我想我会问。我的用例是我有一个相当大的应用程序,它是由oracle DB提供的。

我们还有另一个不是oracle的DB,会参与不同类型的工作和不同的用户组,所以我认为我应该使用一个模块 - 是吗?如果不是,那么实现这种设置的最佳方式是什么?

如果有,有没有办法在我的模块中配置第二个DB,还是应该在主app / config / dp.php文件中完成?

3 个答案:

答案 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();