[英]Doctrine ManyToOne Relation not finding data with findBy method
[英]doctrine FindBy method with 'OR condition'?
是否可以在Doctrine findBy()方法中使用OR语句?
我希望输出是这样的:
SELECT * FROM `friends` WHERE userId=1 OR FriendId=1 ;
代码现在:
$user = $repository->findBy(array(
'userId' => $this->getRequest()->getSession()->get('id')
);
我只想使用DQL ...将这样的函数添加到您的存储库:
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
您可以使用querybuilder表达式构建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
类上有一些更多的文档
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.