学说2从两个关系中获取一个集合?

时间:2011-08-10 10:42:50

标签: doctrine doctrine-orm

我有2个表成员和评论..我成功地加入了他们。所以现在,我可以获得任何用户的所有条目的集合。但我需要创建一个名为“粉丝”的anothewr表,其中每个用户都可以跟随每个人。因此,现在,我希望能够从1个用户那里得到他所关注的用户的评论。但是不知道用这个新表来完成这种关系的方法是什么。

用户实体:

namespace Entities\Members;

/**
 * @Entity(repositoryClass="\Entities\Member\MembersRepository")
 * @Table(name="Members")
 * @HasLifecycleCallbacks
 */
class Members extends \Entities\AbstractEntity
{
    /**
     * @Id @Column(name="id", type="bigint",length=15)
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /** @Column(name="userid", type="bigint", length=26, nullable=true) */
    protected $userid;
    /** @Column(name="fname", type="string", length=255,nullable=true) */
    protected $fname;
    /** @OneToMany(targetEntity="\Entities\Users\Wall", mappedBy="entry", cascade={"persist"}) */
    protected $commententries;

    public function __construct()
    {
        $this->commententries = new \Doctrine\Common\Collections\ArrayCollection();
    }
}

评论实体:

 namespace Entities\Members;

/**
 * @Entity(repositoryClass="\Entities\Member\CommentsRepository")
 * @Table(name="comments")
 * @HasLifecycleCallbacks
 */
class Comments extends \Entities\AbstractEntity
{
    /**
     * @Id @Column(name="id", type="bigint",length=15)
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /** @Column(name="userid", type="bigint", length=26, nullable=true) */

    /**
     * @ManyToOne(targetEntity="\Entities\Member\Member", cascade={"persist"})
     * @JoinColumn(name="userid", referencedColumnName="id")
     */
    protected $entry;

}

这有效,我可以通过以下方式获得用户的所有评论:

$this->repo->findByUserid(3);  (userid = 3)

但是,如何添加“跟随”表(就像推特一样)。一个人可以跟随其他人,因此,我不仅可以看到用户id-3评论,还可以看到他正在关注的其他用户的其他评论?

表名为:粉丝:

  namespace Entities\Members;

/**
 * @Entity(repositoryClass="\Entities\Member\FollowersRepository")
 * @Table(name="followers")
 * @HasLifecycleCallbacks
 */
class Followers extends \Entities\AbstractEntity
{
    /**
     * @Id @Column(name="id", type="bigint",length=15)
     * @GeneratedValue(strategy="AUTO")
     */
    protected $id;
    /** @Column(name="userid", type="bigint", length=26, nullable=true) */

    protected ???;

    /**
     * @Many  ???
     * @JoinColumn(   ???
     */
    protected $???;

}

1 个答案:

答案 0 :(得分:0)

这样做的最佳方式可能是建立从粉丝到会员的关系。

然后为Comments Entity创建一个EntityRepository,您将在其中创建一个函数,例如:getCommentsByUserIdIncludingFollowers($ userId),您可以在其中创建一个返回所需信息/注释的DQL查询。

这就是我建议的方式。