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;

在标签实体中,我有这个:

/**
 * @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 回答