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

时间:2012-05-17 09:25:27

标签: collections proxy doctrine-orm persistence entity

我有以下情况:

用户可以关注或跟随其他用户。

用户与ManyToMany关系相关,如下面的代码所示

/**
 @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进行快速检查时加载所有用户实体是没有意义的。 我想知道是否可以创建自定义代理方法来定义此自定义查询逻辑或是否存在其他解决方案。

感谢您的建议。

1 个答案:

答案 0 :(得分:1)

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

设置存储库类的一个很好的例子是:

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/working-with-objects.html#custom-repositories