Doctrine查询:从关联中选择

时间:2014-01-30 18:33:05

标签: filter doctrine associations dql

我正在尝试为以下情况创建查询,但首先使用的实体:

用户:

/**
 * Friendships to me (the user)
 *
 * @OneToMany(targetEntity="Friendship", mappedBy="to", fetch="EAGER")
 */
protected $friendshipsTo;

/**
 * Friendships from me (the user)
 *
 * @OneToMany(targetEntity="Friendship", mappedBy="from", fetch="EAGER")
 */
protected $friendshipsFrom;

友谊:

/**
 * The user who started the friend request
 * 
 * @var \Entity\User
 * @ManyToOne(targetEntity="User", inversedBy="friendshipsFrom")
 */
protected $from = null;

/**
 * The user who got the friend request
 * 
 * @var \Entity\User
 * @ManyToOne(targetEntity="User", inversedBy="friendshipsTo")
 */
protected $to = null;

我希望这可以解释它。如果我添加了一个朋友,我将创建一个新的友谊实体,作为“来自”,另一个用户作为“来”。

所以现在我想选择用户的所有朋友。我已经想出来了,这是我的解决方案:

$query = $qb->select('u, ff, ft')
            ->from('KontakteApp\Api\Entity\User', 'u')
            ->leftJoin('u.friendshipsTo', 'ft')
            ->leftJoin('u.friendshipsFrom', 'ff')
            ->where('ft.from = :user')
            ->orWhere('ff.to = :user')
            ->andWhere('u.id != :user')
            ->getQuery();

那么现在的问题是什么?我意识到在这种情况下,如果我找到一个id为2的用户的朋友(此处为id = 3)

 {
    "id": 3,
    "friendshipFrom": [
        {
            "id": 42,
            "from": 3,
            "to": 2,
            "status": "open"
        },
       **HERE ARE NO MORE FRIENDSHIPS**
    ],
    "friendshipTo": [
        This is array is full of friendships of this user
    ]
}

除了在我的选择中出现用户的友谊之外,友谊中没有更多的友谊。这是因为select('u, ff ,ft')。 现在我希望友谊会发生同样的事情,所以在这种情况下,朋友的友情应该是空的。

总结:如何过滤关联的实体?

0 个答案:

没有答案