1

多くのユーザーと多くのデザインを含むサイトがあり、それぞれが 1 人のユーザーによって作成されています。ユーザーは他のデザインをお気に入りとして選択することもでき、お気に入りを表示するページに移動できます。したがって、「お気に入り」と呼ばれるユーザーとデザインの間には多対多の関係があります。

このお気に入りの関係を実装する最善の方法は何だろうと思っています。特定のユーザーのお気に入りを探しているのは、1 ページだけです。Doctrine はデフォルトで、関連するすべてのオブジェクトを含むオブジェクトを返すように思われるので、この関係を追加することで、すべてのデザイン リスト API 呼び出しに大量の余分なオブジェクトが突然追加されるのではないかと心配しています。

これを設定する方法についてのアドバイスはありますか? すべてのエンティティのリポジトリを用意しています。

4

1 に答える 1

0

私が持っているタグと投稿の間の実装を共有します (投稿には複数のタグを付けることができ、各タグは複数の投稿に関連付けることができます)。始めるのに十分似ていると思います。セットアップは非常に簡単です。

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);
于 2012-08-12T21:47:03.537 に答える