2016-09-07 6 views
0

モジュールが正しい方法であることを100%確信しているわけではありません。だから私は尋ねると思った。私の使用事例は、私がオラクルDBから動力を得ているかなり大きなアプリケーションを持っているということです。Yii2モジュールとコンフィギュレーション

オラクルではない別のDBがあり、別の種類の作業と別のユーザーグループに関与することになるので、モジュールを使うべきだと思いました。この種の設定を達成するための最良の方法は何か?

もしそうなら、私のモジュール内でこの2番目のDBを設定する方法があるのでしょうか、それともメインのapp/config/dp.phpファイル内で行うべきでしょうか?コンフィグで

+0

基本アプリケーションまたは高度なアプリケーションを使用していますか? –

+0

@NanaPartykar Basic – Jonnny

+0

次に、もう一つのdb1.php **を作成し、** web.php **の 'db1 '=> require(__ DIR__)で宣言されているように' config/web.php'にインクルードします。 '/db1.php')、 ' –

答えて

1

あなたはYii2-Basicアプリケーションを使用している、ので。だから、ディレクトリ構造は似ています。

Root Folder 
    -> assets 
    -> commands 
    -> components 
    -> config 
     -> console.php 
     -> db.php 
     -> params.php 
     -> web.php 
    -> controllers 
    -> mail 
    . 
    . 
    . 

あなたのデータベース接続の詳細は、をdb.phpに存在しています。これで、別のデータベースがアプリケーションで重要な役割を果たすようになります。心配ない。もう1つのデータベース接続の詳細をdb2.phpconfigフォルダ内に作成します。

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'), 
    ], 
]; 

のために1行を追加します。次に、別のデータベース接続に関連するクエリを使用します。

$row = Yii::$app->db2->createCommand("SELECT * FROM `table_name`")->queryOne(); 
1

/、2番目のデータベース構成を追加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

web.php簡単な方法は、2を定義していますそれぞれのdbの異なるコンポーネントの1つ(例:oracleの場合はdb1、mysqlの場合はdb2の場合)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', 
    ], 

とr YiiのにEFER :: $ 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(); 
関連する問題