Doctrine的findBy()方法是否支持使用OR语句?
我希望输出结果如下:
SELECT * FROM `friends` WHERE userId=1 OR FriendId=1 ;
现在的代码:
$user = $repository->findBy(array(
'userId' => $this->getRequest()->getSession()->get('id')
);
Doctrine的findBy()方法是否支持使用OR语句?
我希望输出结果如下:
SELECT * FROM `friends` WHERE userId=1 OR FriendId=1 ;
现在的代码:
$user = $repository->findBy(array(
'userId' => $this->getRequest()->getSession()->get('id')
);
我只会使用DQL……在你的repository中添加这样一个函数:
public function findFriends($userId)
{
return $this->getEntityManager()
->createQuery('SELECT f FROM Friends WHERE userId = :userId OR FriendId = :userId')
->setParameter('userId', $userId)
->getOneOrNullResult();
}
或者使用查询构建器代替DQL:
public function findFriends($userId)
{
return $this->getEntityManager()
->createQueryBuilder()
->from('Friends', 'f')
->where('f.userId = :userId')
->orWhere('f.friendId = :userId')
->setParameter('userId', $userId)
->getQuery()
->getOneOrNullResult();
}
然后只需要使用:
$user = $repository->findFriends($this->getRequest()->getSession()->get('id'));
您可以在传递给findBy
的数组中使用$or
和$and
关键字:
$id = $this->getRequest()->getSession()->get('id');
$user = $repo->findBy(
array(
'$or' => array(
array('userId' => $id),
array('FriendId' => $id),
),
);
);
但是考虑到这是针对 mongoDB 的特定内容,可能无法回答您的问题。使用 QueryBuilder,您可以直接编写以下代码:
$qb = $repository->createQueryBuilder();
$qb->select('f')
->from('friends', 'f')//replace friends with the correct entity name
->where('f.userId = :uid')
->orWhere('f.FriendId = :fid')
->setParameter('uid', $id)
->setParameter('fid', $id);
$users = $qb->getQuery()->getSingleResult();//or more
or
子句,示例如下:$qb->where(
$qb->expr()->orX(
$qb->expr()->eq('f.userId', ':uid'),
$qb->expr()->eq('f.FriendId', ':fid')
)
)
->setParameter('uid', $id)
->setParameter('fid', $id);
尽管您两次使用相同的值,但必须调用setParameter
两次。 原因可以在此找到
最后,关于QueryBuilder
类的一些更多文档请参考这里