ManyToMany与symfony2 orm doctrine中的额外字段的关系

Blo*_*kas 0 orm entity-relationship many-to-many symfony

嗨,我有同样的问题:与额外字段的多对多自我关系?但是我找不到答案:/我先尝试了ManyToOne和其他网站OneToMany ...但后来我无法使用类似的东西

    public function hasFriend(User $user)
{
    return $this->myFriends->contains($user);
}  
Run Code Online (Sandbox Code Playgroud)

因为有一些这个问题:

This function is called, taking a User type $user variable and you then use the contains()      function on $this->myFriends.
Run Code Online (Sandbox Code Playgroud)

$ this-> myFriends是一个请求的ArrayCollection(与User不同的类型)和关于contains()的doctrine文档:

The comparison of two elements is strict, that means not only the value but also the type must match.
Run Code Online (Sandbox Code Playgroud)

那么用额外的字段解决这个ManyToMany关系的最佳方法是什么?或者,如果我回去设置onetomany和manytoone关系,我怎么能修改hasFriend方法?例如,检查ID是否在ID的数组集合中.

编辑:我有这张桌子...我需要的是:1.选择我的朋友......和我的粉丝......检查我是不是和他在一起.(因为他可以和我成为朋友,我不必和他在一起......就像在推特上一样).我可以做很多事,但我需要额外的字段,如:"查看""他订阅我的时间",你可以在我的桌子上看到.

并进行这样的查询,然后能够在树枝检查if(app.user.hasFriend(follower)或类似的东西)

           $qb = $this->createQueryBuilder('r')
                  ->select('u')
                  ->innerJoin('UserBundle:User', 'u')
                  ->Where('r.friend_id=:id')
                  ->setParameter('id', $id)
                  ->orderBy('r.time', 'DESC')
                  ->setMaxResults(50);

    return $qb->getQuery()
              ->getResult();
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

小智 5

我试图与额外的领域建立多对多的关系,也无法使其工作......我在论坛中读到的东西(不记得在哪里)是:

如果您向关系添加数据,那么它就不再是关系了.这是一个新实体.

这是正确的做法.使用新字段创建新实体,如果需要,可以创建自定义存储库以添加所需的方法.

一个<---多对多的领域---> B.

会成为

A - 一对多 - > C(带新字段)< - 一对多 - B

当然,C与A和B都有ManyToOne关系.

我到处搜索如何做到这一点,但最后,这是正确的做法,如果你添加数据,它不再是一种关系.

您还可以复制通常包含的内容,或尝试在自定义存储库中覆盖它,以执行您需要执行的操作.

我希望这有帮助.