0

我的用户实体中有多对多自引用关系。

// Acme\DemoBundle\Resources\config\doctrine\User.orm.yml
Acme\DemoBundle\Entity\User:
    type: entity
    repositoryClass: Acme\DemoBundle\Entity\Repository\UserRepository
    table: users
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        username:
            type: string
            length: 25
            unique: true
    manyToMany:
        friendsWithMe:
            targetEntity: User
            mappedBy: myFriends
        myFriends:
            targetEntity: User
            inversedBy: friendsWithMe
            joinTable:
                name: friends
                joinColumns:
                    user_id:
                        referencedColumnName: id
                inverseJoinColumns:
                    friend_user_id:
                        referencedColumnName: id

现在我想获得三个不同的用户集合:

  1. MyFriends - myFriend == true 和friendWithMe == false 的实体集合
  2. FriendWithMe - myFriend == false 和friendWithMe == true 的用户集合
  3. MutualFriends - myFriend == true 和friendWithMe == true 的用户集合

如果朋友是相互的,Standart getMyFriends 和 getFriendsWithMe(在用户实体中生成)返回所有MyFriendsFriendWithMe记录 =(

我试图深入研究标准的一面,但它不适用于多对多关系。

4

1 回答 1

1

我认为您的设计结构存在普遍问题。教义中的自指关系等于相互关系。并非两个用户彼此都是朋友的状态听起来更像是 FriendsRequest。也许您应该将此行为更改为对 MutualFriends 的关系以及对 MyFriendRequests 和 RecievedFriendRequest 的两个不同的关系。

另一种可能性是使用像“友谊”这样的关系实体,这可能看起来像

// Acme\DemoBundle\Resources\config\doctrine\Friendship.orm.yml
Acme\DemoBundle\Entity\Friendship:
    type: entity
    repositoryClass: Acme\DemoBundle\Entity\Repository\FriendshipRepository
    table: friendship
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        user_one_accepted:
            type: boolean
        user_two_accepted:
            type: boolean
    manyToOne:
        user_one:
            targetEntity: User
        user_two:
            targetEntity: User
于 2014-09-18T13:06:42.910 回答