特定のモデルをあるデータベースに配置し、他のモデルを別のデータベースに配置することは可能ですか (同じ接続を使用して)?
システムの複数のインストール間で共有したい読み取り専用テーブルが多数あります。その他のテーブルは、インストールごとに必要です。例として、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';
が役に立たない...