0

私はソーシャル Web サイトを構築しており、フィードがどのように機能するかを説明しています。ここで答えを使用したい:ソーシャルネットワークでアクティビティストリームを実装し、言及されたデータベース設計を実装する方法:

id             
user_id       (int)
activity_type (tinyint)
source_id     (int)  
parent_id     (int)
parent_type   (tinyint)
time          (datetime but a smaller type like int would be better) 

source_id問題は、ベースの off をどのようにマッピングするのかわかりませんactivity_type。ユーザーが登録する場合、登録したユーザーになりたいですsource_id。誰かがグループを作成すると、それがグループにsource_idなります。Symfony にこれを行う何らかの方法が組み込まれているかどうかを知りたかっただけです。

フィードをフェッチし、それactivity_typeが user_register である場合、追加のクエリを実行せずにソース (ユーザー) を取得するためにこれを実行できるようにしたいと考えています。

$feedEntity->getSource()->getUsername(); //getSource() being the User entity

source_typeが「user_post」の場合:

$feedEntity->getSource()->getMessage(); //getSource() being the UserPost entity

基本的に、このデータを保存して最速にする最善の方法を見つけたいだけです。

4

1 に答える 1

2

教義に対処するのは簡単ではなく、自動的に 100% 達成することはできないと思います

ただし、キーワードはテーブル継承です

http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html#single-table-inheritance

次のようなことを行うことで、目標を達成できると思います。

  • このエンティティをUserSourceにロードするよう教義に指示するテーブルのタイプ列によって識別子マップを作成します(たとえば)

  • このUserSourceは独自のエンティティにすることができます (必要に応じて基本クラスから継承できます)。ここで、source_id 列を実際のユーザー エンティティにマップすることを決定できます。

  • 識別子マップ内にマップされたさまざまなエンティティの名前空間に対してinstanceofマッチングを使用して、さまざまなソースに対してさまざまな動作を定義できます。

于 2013-11-13T20:47:10.373 に答える