Doctrine 原则2:从2个关系中获取集合?

Doctrine 原则2:从2个关系中获取集合?,doctrine,doctrine-orm,Doctrine,Doctrine Orm,我有两张表,包括成员和评论。。我成功地让他们加入了我们的行列。现在,我可以为任何用户获取所有条目的集合。但我需要创建一个名为“followers”的thewr表,每个用户都可以在该表中跟踪每个用户。因此,现在,我希望能够从1个用户获得所有评论,同时也能获得他正在关注的用户的评论。但是不知道用什么方法来完成这个新表的关系 用户实体: namespace Entities\Members; /** * @Entity(repositoryClass="\Entities\Member\Membe

我有两张表,包括成员和评论。。我成功地让他们加入了我们的行列。现在,我可以为任何用户获取所有条目的集合。但我需要创建一个名为“followers”的thewr表,每个用户都可以在该表中跟踪每个用户。因此,现在,我希望能够从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)
但是,我如何添加“following”表(就像twitter一样)。其中一个可以跟随另一个,因此,我不仅可以看到用户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 $???;

}

也许最好的方法是建立从追随者到成员的关系

然后为Comments实体创建一个EntityRepository,您将在其中创建一个函数,如:getCommentsBySeridIncludingFollowers($userId),在该函数中,您将创建一个DQL查询,返回所需的正确信息/注释


这就是我的建议。

追随者与成员之间的关系是什么?在追随者实体中,我将与成员建立多人关系。您可能希望有一个跟随者能够跟随多个成员,并且有一个成员可以拥有多个跟随者。请看:如果我这样做,它将创建一个manay many表,显示成员和追随者之间的链接。那么,这将如何运作。。然后我将如何将注释附加到此链接表?您将获得一个成员的注释,但随后可以执行一个查询,在该查询中,您可以选择当前登录用户的所有注释,包括他/她的追随者在查询中使用JOIN的注释。也许你还需要研究成员本身的多对多关系。似乎你想让另一个成员跟随其他成员。因此,一个成员将有$following多对多和$followers多对多作为反向。