Collections 为doctrine2实体生成自定义代理方法

Collections 为doctrine2实体生成自定义代理方法,collections,proxy,doctrine-orm,persistence,entity,Collections,Proxy,Doctrine Orm,Persistence,Entity,我有以下情况: 用户可以跟随其他用户,也可以被其他用户跟随 如下面的代码所示,用户通过多个关系进行关联 /** @var ArrayCollection $follows @ORM\ManyToMany(targetEntity="User", inversedBy="followers") @ORM\JoinTable(name="user_follows", joinColumns={@ORM\JoinColumn(name="user_id", reference

我有以下情况:

用户可以跟随其他用户,也可以被其他用户跟随

如下面的代码所示,用户通过多个关系进行关联

/**
 @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;
我希望有一个名为
followersIDs
(未持久化到数据库)的集合字段,该字段将根据需要(调用
$user->getFollowersIDs()
)填充,其中仅包含跟随当前用户的用户的ID(而不是整个实体)

关键是一个用户可能会被大量其他用户跟踪,我认为当我只需要他们的ID进行一些快速检查时,加载所有用户实体是毫无意义的。 我想知道是否可以创建一个自定义代理方法来定义这个自定义查询逻辑,或者是否存在其他解决方案


感谢您的建议。

不要碰Doctrine代理类,它们是在内部生成和使用的。取而代之的是为所需数据编写一些自定义DQL,并将其放入存储库类中

下面是设置存储库类的一个很好的示例: