2017-04-19 5 views
0

私のアプリケーションのデータを特定の属性に応じて異なるデータベースに配布するモジュールを作成します。Yii2アプリケーションは特定のフィールドを使用してフィルタリングされた異なるデータベースにあるデータベースからデータを配信します

のは、私の現在のプログラムは、従業員情報を収集し、ここで私が持っている分野であると言うてみましょう:

db_company

tbl_employee => [id, fname, mname, lname, name_suffix, birthdate, address, sex, civil_status] 

今、私は別でcivil_statusある特定のフィールドに従ってデータを配信したいです同じテーブル構造を持つデータベース

db_company_single

tbl_employee => [id, fname, mname, lname, name_suffix, birthdate, address, sex, civil_status] 

それだけでモジュールかを使用して可能だろう

tbl_employee => [id, fname, mname, lname, name_suffix, birthdate, address, sex, civil_status] 

をdb_company_married?

ありがとうございます。

答えて

0

はい、接続をdatabaseに切り替える必要があります。あなたはマスタースレーブ構成を使用する必要があるかもしれませんあなたのケースのために

0

、スレーブ構成に広告あなたの他のデータベース接続を、Yii2のドキュメントは、それを説明し、ここでYii2 Master Slave

例コード

[ 
    'class' => 'yii\db\Connection', 

    // configuration for the master 
    'dsn' => 'dsn for master server', 
    'username' => 'master', 
    'password' => '', 

    // common configuration for slaves 
    'slaveConfig' => [ 
     'username' => 'slave', 
     'password' => '', 
     'attributes' => [ 
      // use a smaller connection timeout 
      PDO::ATTR_TIMEOUT => 10, 
     ], 
    ], 

    // list of slave configurations 
    'slaves' => [ 
     ['dsn' => 'dsn for slave server 1'], 
     ['dsn' => 'dsn for slave server 2'], 
     ['dsn' => 'dsn for slave server 3'], 
     ['dsn' => 'dsn for slave server 4'], 
    ], 
] 
+0

$model = new Employee(); // Already false but it's easier to get the idea. Employee::$isMarried = false; $model->fname = 'Single'; $model->save(); Employee::$isMarried = true; $model->fname = 'Married'; $model->save(); 

モデル。特定のフィールドでデータを分離する方法はありますか? –

+0

よく、次に、あなたの属性に応じて、データベース接続を動的に変更する必要があります –

1

あなたがする必要がありますモデル内のgetDb()をオーバーライドし、静的変数に基づいて、それが返す接続を変更します。

設定:

'db' => [ 
    'class' => 'yii\db\Connection', 
    'dsn' => 'mysql:host=localhost;dbname=db_company_single', 
    'username' => 'root', 
    'password' => '', 
    'charset' => 'utf8', 
], 
'dbMarried' => [ 
    'class' => 'yii\db\Connection', 
    'dsn' => 'mysql:host=localhost;dbname=db_company_married', 
    'username' => 'root', 
    'password' => '', 
    'charset' => 'utf8', 
], 

コントローラ:私は、スレーブは、マスタDBの同じ内容をヘクタール信じる

public static $isMarried = false; 

public static function getDb() { 
    if (self::$isMarried === true) { 
     return Yii::$app->dbMarried; 
    } else { 
     return Yii::$app->db; 
    } 
} 
+0

おかげで...これは私にアイデアを与えます..私は試してみて、これが正しいとマークして動作するかどうかを知らせます..任意のアイデアdb_companyで更新が発生したら、db_company_marriedをどのように更新できますか? –

+0

db_companyで 'Employee'が更新されたときのように、db_company_marriedは自動的に同じデータで更新する必要がありますか? – xReprisal

+0

はい、db_companyの従業員アドレスを更新する場合と同様に、db_company_marriedにも反映されます.db_companyのエントリを削除する場合も同じです。 –

関連する問題