私が持っているタグと投稿の間の実装を共有します (投稿には複数のタグを付けることができ、各タグは複数の投稿に関連付けることができます)。始めるのに十分似ていると思います。セットアップは非常に簡単です。
Post エンティティには、次のものがあります。
/**
* @ManyToMany(targetEntity="Tag", inversedBy="posts")
* @JoinTable(name="activity_relationship",
* joinColumns={@JoinColumn(name="object", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="subject", referencedColumnName="id")}
* )
*/
protected $tags;
Tag エンティティには、次のものがあります。
/**
* @ManyToMany(targetEntity="Post", mappedBy="tags")
*/
protected $posts;
結合テーブルに必要なエンティティはありません。
タグを含む投稿の場合、常に少量であるため、tags プロパティにアクセスするだけで十分ですが、各タグには大量の投稿がある可能性が高いため、これを LIMIT および OFFSET で制御する必要があります。 . このため、Cerad が前述したように、$posts 変数を直接使用する必要はなく、代わりに dql を使用して個別にクエリを実行します。
SELECT t
FROM Post p
JOIN p.tags t
<add whatever other stuff you want>
そのクエリを実行する方法に関係なく、おそらく Doctrine からクエリ オブジェクトを取得し、LIMIT と OFFSET を適用するだけです。
$query->setMaxResults($limit);
$query->setFirstResult($offset);