4

特定のモデルをあるデータベースに配置し、他のモデルを別のデータベースに配置することは可能ですか (同じ接続を使用して)?

システムの複数のインストール間で共有したい読み取り専用テーブルが多数あります。その他のテーブルは、インストールごとに必要です。例として、usersが共有テーブルであり、postsインストールごとであるとします。

あるスキーマ (「共有」と呼びましょう) にはusersテーブルがあり、別のスキーマ (「mycake」) にはposts.

共有データベースを指す新しいデータベース接続を作成することで、他のデータベースから User モデルを読み取ることができました (ただし、2 つのデータベースは同じホスト上にあり、同じログイン情報で両方にアクセスできます)。

class User extends AppModel {
    var $useDBConfig = 'sharedConnection';
}

問題は、postsテーブルに参加するときです。テーブル名の前にスキーマ名を追加しないため、posts.

// what it does
SELECT * FROM users User INNER JOIN posts Post ...

// what I'd like it to do:
SELECT * FROM shared.users User INNER JOIN mycake.posts Post ...

基本的に、完全修飾されたテーブル名をモデルに割り当て、それをすべてのクエリで強制的に使用する方法はありますか? 設定var $useTable = 'shared.users';が役に立たない...

4

3 に答える 3

1

このサイトにはそれを行う方法がありますが、少しハックです。

于 2009-11-24T06:05:35.350 に答える
1

さまざまなデータベースを使用するモデルを持つ CakePHP でサイトを構築しましたが、さまざまなデータベース間の結合で問題が発生したことはありません。フレームワークがすべてを処理してくれるようです。ただし、モデルを機能させるには、モデルで使用されるデータベース テーブルを明示的に指定する必要がある場合があります。

于 2009-11-24T14:32:04.503 に答える