使用Doctrine映射到列**或**列

时间:2015-04-03 15:03:41

标签: symfony orm doctrine

我有一个用户实体和一个关系实体。 (关系实体用于识别社交关系.face朋友,推特粉丝......等)

这是我的关系课,以便更好地理解它:

 /**
 * Describes a relationship between two users in the direction of user1 to user2. (i.e. user1 is 'friends' with user2)
 * This relationship may be mutual
 * @package AppBundle\Entity
 */
class Relationship {
    protected $id;
    protected $user1;
    protected $user2;
    protected $source;
    protected $type;
    protected $mutual;

    /**
     * @param string $source The source of the relationship information (facebook, twitter...etc.)
     * @param string $type The type of relationship. (source specific) e.g. friends, follower
     * @param int $user1 The user id
     * @param int $user2 The user id
     * @param bool $mutual If set to true than the reverse relationship is true (i.e. user2 is 'friends' with user1 as well)
     * This may seem obvious for facebook friends but the twitter follower relationship is not always mutual
     */
    function __construct($user1,$user2,$source,$type,$mutual)
    {
        $this->user1 = $user1;
        $this->user2 = $user2;
        $this->source = $source;
        $this->type = $type;
        $this->mutual = $mutual;

    }

我遇到的麻烦是将用户实体映射到关系实体。

用户的特定实例可能是关系中的user1 user2

我无法专门映射到关系实体的user1列,因为它可能是user2

我试图通过让一个条目双向定义关系(使用$ mutual属性完成)来避免Relationships表中的重复条目。

有没有办法在Doctrine中映射它,以便用户可以访问他们的关系(例如User-> getRelationships),无论他们是user1还是user2

1 个答案:

答案 0 :(得分:1)

老实说“我不知道”:(

但我在这里回答的原因是要说明一点。 User1和User2都是用户的实例。所以,这里的问题是用户实体充当两个不同的角色。用户正在引用另一个用户,我的意思是用户的主键是用户外键(自引用)。我个人在制作社交申请时遇到了这个问题。一个用户是另一个用户的朋友。用户在朋友的同时有朋友。我通过复制你不想要的行解决了这个问题。顺便说一句,我也在等待任何击球手解决方案。祝你好运