0

次のシナリオがあります。

ユーザーは、他のユーザーをフォローまたはフォローすることができます。

次のコードが示すように、ユーザーは多対多の関係によって関連付けられています

/**
 @var ArrayCollection $follows

 @ORM\ManyToMany(targetEntity="User", inversedBy="followers")
 @ORM\JoinTable(name="user_follows",
         joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
         inverseJoinColumns={@ORM\JoinColumn(name="followed_user_id", referencedColumnName="id")}
     )
*/
protected $follows;

/**
 @var ArrayCollection $followers

 @ORM\ManyToMany(targetEntity="User", mappedBy="follows")
*/
protected $followers;

現在のユーザーをフォローしているユーザーのID(エンティティ全体ではない)のみfollowersIDsをオンデマンドで(呼び出し時に)入力する(データベースに永続化されていない)という名前のコレクションフィールドが必要です。$user->getFollowersIDs()

重要なのは、ユーザーの後に大量の他のユーザーが続く可能性があることです。簡単なチェックのためにIDが必要な場合に、すべてのユーザーエンティティをロードするのは無意味だと思います。このカスタムクエリロジックを定義するカスタムプロキシメソッドを作成できるかどうか、または他のソリューションが存在するかどうか疑問に思います。

アドバイスありがとうございます。

4

1 に答える 1

1

Doctrineプロキシクラスには触れないでください。これらは内部で生成および使用されます。代わりに、必要なデータのカスタムDQLを記述し、それをリポジトリクラスに配置することを検討します。

リポジトリクラスを設定する良い例は次のとおりです。

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/working-with-objects.html#custom-repositories

于 2012-05-18T08:00:18.080 に答える