3

各ユーザーが独自のプレフィックス付きテーブルを持つマルチテナントシステムセットアップを取得しようとしています。

だから私のデータベースは次のように見えるかもしれません

users
acme_posts
my_posts
their_posts
our_posts

このような解決策は良いスタートですが、プレフィックスを動的に作成することはできません。

上記のドクトリンソリューションを変更して、ログインしたユーザーに基づいてデータベースプレフィックスを設定することは可能ですか?

別のアプローチは、メインユーザーデータベースを作成してから、ユーザー固有のテーブル用に個別のデータベースを作成することですが、Doctrineが複数のデータベース間の関係を処理できるかどうかはわかりません。

すべての提案を歓迎します。

4

1 に答える 1

0

EventListener をサービスとして定義するだけで、Doctrine EventListener 内のサービス コンテナに非常に簡単にアクセスできます (手順はここにあります)。ただし、すべてのクラス メタデータが 1 回だけ読み込まれてキャッシュされるため、別のユーザーについて知ることができないため、このアプローチはあなたの状況では役に立ちません。

明らかにあなたのユースケースはわかりませんが、キーの一部として「user_namespace」などを含むpostsテーブルが1つあるなど、* _postsテーブルにフィールドを単純に追加できない理由はありますか? ?

どのユーザーがログインしているかについての情報でコントローラーのロジックを乱雑にすることに異議がある場合は、prePersist Doctrine EventListener を使用して新しいエンティティに適切な user_namespace を設定し、フィルター(Doctrine >=2.2 の場合) またはすべてのクエリを制限して、適切な user_namespace からエンティティのみを取得するカスタム DQL walker (その他すべて)。

于 2012-07-14T09:48:40.403 に答える