5

コントローラ内の2つの異なるデータベースからデータを取得しようとしています

app / Controller / UsersController.php

私のデータベース接続はdatabase.phpで宣言されています

$default = array(
    ...
    'database' => 'test'
    ...
    );
$test = array(
    ...
    'database' => 'test1'
    ...
    );

そして私のdisplay()行動では:

public function display() {
    $this->set('defaultUsers', $this->User->find('all'));
    $this->User->schemaName = 'test1';
    $this->User->cacheQueries = false;
    $this->set('testUsers', $this->User->find('all'));
}

これにより、2つの異なるソースからデータを正常に取得できますが、問題は、これら2つのデータベースに同じパスワードを設定する必要があることです。そうしないと、機能しません。

私はここや他のサイトで見つけた他の解決策を試しました。お気に入り:

  • 変更$this->User->useDbConfig = 'test'$this->User->cacheQueries = falseても同じデータセットが得られます。

  • ConnectionManager::getDataSource()and setConfig()、、、、create()などdrop()を使用setDataSource()します。これらはいずれも機能せず、存在しないものもあります。

どんな助けでも大歓迎です!2つの類似したアプリケーション(別名2つのデータベース)の同じコードベースが必要なため。

ありがとう!

4

1 に答える 1

4

「setDataSource()」を使用してデータソース/接続を切り替える必要があります。これにより、モデルの「キャッシュされた」スキーマなどがリセットされます。

public function display() {
    $this->set('defaultUsers', $this->User->find('all'));
    $this->User->setDataSource('test1');
    $this->set('testUsers', $this->User->find('all'));
}

アプリケーション全体で両方のデータベースのデータにアクセスする必要がある場合、別のオプションは2つのユーザーモデルを作成することです。1つはデータソースとして「test」を使用し、もう1つはデータソースとして「test1」を使用します。このようにして、データソースを常に切り替える必要はありません。

例:

class TestUser extends AppModel {
    public $useTable = 'users'; // name of the database table 
    public $useDbConfig = 'test1';  // name of the database configuration in database.php
}

さらに注意してください:'$ test' database-configは、CakePHPユニットテストの実行に使用される事前構成されたデータベース接続です。独自のデータベース接続名を作成することを検討してください

于 2013-01-28T19:24:10.617 に答える