我正在尝试为以下情况创建查询,但首先使用的实体:
用户:
/**
* 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')。 现在我希望友谊会发生同样的事情,所以在这种情况下,朋友的友情应该是空的。
总结:如何过滤关联的实体?