繁体   English   中英

带有'OR条件'的学说FindBy方法?

[英]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'));

MongoDB的具体语法

您可以使用传递给findBy的数组中的$or $and键:

$id = $this->getRequest()->getSession()->get('id');
$user = $repo->findBy(
    array(
        '$or' => array(
            array('userId' => $id),
            array('FriendId' => $id),
        ),
    );
);

使用QueryBuilder:

但是看到这是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM