1

CakePHP バージョンの使用: 2.3.1

承認に使用するデフォルトのデータベースがあり、それに基づいて、クライアントごとに異なるデータベースが作成されます (データベース名にはクライアント名が含まれています)。

私はそれらの間のさまざまな関係を持つ多くのモデルを持っています。1 回の呼び出し (関連するすべてのモデル データを再帰的に取得する) を使用してそれらを取得したいと考えています。

シナリオ:

データベース

default :
clients 
[id, password, name]
[1, 'qwertycolemak', 'amazon']
[2, '5t4ck0verfl0w', 'ebay']

デフォルト以外のデータベース (次の 2)

client_amazon
students[student_id, student_name]
course_students [student_id, course_id]
courses [course_id, course_name]

client_ebay
(same as client_amazon)

ここで、[id:2, password:'5t4ck0verfl0w'] のリクエストを受け取ったとします。デフォルトのデータベース ( clients ) を確認し、パスワードを確認し、名前を取得します。この場合はebayです。

今、アクセスしたいデータベースは「client_ebay」です

各クライアントに対応する database.php に異なる構成があります。を使用してデータソースを変更してみました

$this->student->setDatasource('client_ebay')
$this->course->setDatasource('client_ebay')
$this->course_student->setDatasource('client_ebay')

これは、モデルへの個々の CRUD 呼び出し (非再帰的) で機能します。

しかし、(再帰をオンにして)呼び出しを使用すると

$this->student->findById(5)

データソースのデフォルトは「デフォルト」で、エラーが発生します:モデル学生
のテーブル学生がデータソースのデフォルトで見つかりませんでした

コントローラーを介してすべてのモデル (1 つずつではなく) のデフォルトのデータソースを動的に変更するにはどうすればよいですか?

4

3 に答える 3

0

モデルの $useDbConfig 属性を変更しようとしましたか? 例えば:

$this->Student->useDbConfig = 'client_ebay';
于 2013-10-21T15:52:50.443 に答える
0

コントローラーの例、CakePHP 2.5.x で DataSources のマルチ DB を変更

App::uses('AppController', 'Controller');

class DemoController extends AppController {

public $uses = array('AppModel', 'GVA21', 'GVA01', 'GVA14', 'GVA24' );
public function test_dbs(){
    $this->autoRender=false;
    // Load ConnectManager
    App::uses('ConnectionManager', 'Model');
    // DataSource ['default']
    $MDM = $this->GVA14->find('count');
    echo "MDM.GVA14\n<br>";
    debug($MDM);
    // Get DataSource Config DB ['default'] and ['SRL']
    $confDeafult = ConnectionManager::$config->default;
    $confSrl = ConnectionManager::$config->SRL;
    // Change DataSource ['SRL']
    ConnectionManager::drop('default');
    ConnectionManager::create('default',$confSrl);  //<== Is permanet change Find All models Down
    // $this->GVA01->setDataSource('SRL'); //<== Is temp change Find model
    echo "SRL.GVA14\n<br>";
    $SRL = $this->GVA14->find('count');
    debug($SRL);
    $SRL = $this->GVA01->find('count');
    echo "SRL.GVA01\n<br>";
    debug($SRL);
    $SRL = $this->GVA21->find('count');
    echo "SRL.GVA21\n<br>";
    debug($SRL);
    // Change to DataSource ['default']
    debug(ConnectionManager::drop('default'));
    ConnectionManager::create('default',$confDeafult); //<== Is permanet change Find All models Down
    //$this->GVA01->setDataSource('default'); //<== Is temp change Find model
    $MDM = $this->GVA01->find('count');
    echo "MDM.GVA01\n<br>";
    debug($MDM);
    $MDM = $this->GVA21->find('count');
    echo "MDM.GVA21\n<br>";
    debug($MDM);
    ////FIN
    exit('FIN');
}
于 2014-10-31T00:55:44.900 に答える