我有以下情况:
用户可以关注或被其他用户关注。
用户通过多对多关系相关联,如以下代码所示
/**
@var ArrayCollection $follows
@ORMManyToMany(targetEntity="User", inversedBy="followers")
@ORMJoinTable(name="user_follows",
joinColumns={@ORMJoinColumn(name="user_id", referencedColumnName="id")},
inverseJoinColumns={@ORMJoinColumn(name="followed_user_id", referencedColumnName="id")}
)
*/
protected $follows;
/**
@var ArrayCollection $followers
@ORMManyToMany(targetEntity="User", mappedBy="follows")
*/
protected $followers;
我想要一个名为 followersIDs
(未持久保存到数据库)的集合字段,该字段将按需填充(调用 $user->getFollowersIDs()
时),仅使用关注当前用户的 ID(而不是整个实体)。
关键是用户可以被大量的其他用户关注,我认为当我只需要他们的 ID 进行一些快速检查时,加载所有用户实体是没有意义的。我想知道是否可以创建自定义代理方法来定义此自定义查询逻辑,或者是否存在其他解决方案。
谢谢建议。
不要碰 Doctrine 代理类,它们是在内部生成和使用。相反,着眼于为所需数据编写一些自定义 DQL 并将其放入存储库类中。
设置存储库类的一个很好的例子是:
http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/working-with-objects.html#custom-repositories