学说FindBy方法' OR条件&#39 ;?

时间:2015-11-30 16:39:11

标签: php symfony doctrine-orm doctrine

是否可以在Doctrine findBy()方法中使用 OR 语句?

我希望输出像这样:

SELECT * FROM `friends` WHERE userId=1 OR FriendId=1 ;

代码现在:

$user = $repository->findBy(array(
            'userId' => $this->getRequest()->getSession()->get('id')
    );

2 个答案:

答案 0 :(得分:2)

MongoDB特定语法

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

$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);

Here's some more info

即使您使用相同的值两次,也必须两次调用setParameterThe reason for this can be found here

最后,还有一些文档on the QueryBuilder class

答案 1 :(得分:2)

我只想使用DQL ...将这样的函数添加到您的存储库:

$user = $repository->findFriends($this->getRequest()->getSession()->get('id'));

或者使用查询构建器而不是DQL:

datamatrix <- data [, c(4:10)]
library (edgeR)

#grouping factor
group <- c(1, 2, 2, 2, 2, 2, 2) #groups of each sample)

#create a DGEList
y <- DGEList(counts=datamatrix,group=group)

#########
$counts
  depth depth1 depth2 depth3 depth4 depth5 depth6
1     7    200     35      1    200    850      0
2     3     50     25      5    300   1500      2
3     8    600     15      8    100    300      5
4     4     30      2     10     59     20      0
5    25     20      7      4    600     45      0

$samples
       group lib.size norm.factors
depth      1       47            1
depth1     2      900            1
depth2     2       84            1
depth3     2       28            1
depth4     2     1259            1
depth5     2     2715            1
depth6     2        7            1
##################
#normalize
y <- calcNormFactors(y)

########
> y
An object of class "DGEList"
$counts
  depth depth1 depth2 depth3 depth4 depth5 depth6
1     7    200     35      1    200    850      0
2     3     50     25      5    300   1500      2
3     8    600     15      8    100    300      5
4     4     30      2     10     59     20      0
5    25     20      7      4    600     45      0

$samples
       group lib.size norm.factors
depth      1       47    0.7423735
depth1     2      900    0.5526927
depth2     2       84    0.9534847
depth3     2       28    0.8652676
depth4     2     1259    0.6588115
depth5     2     2715    1.0358307
depth6     2        7    4.3289213
##########################################

> cpm(y)
      depth     depth1    depth2    depth3    depth4     depth5    depth6
1 200621.61  402071.90 436993.56  41275.42 241125.49 302245.841      0.00
2  85980.69  100517.97 312138.26 206377.10 361688.24 533375.014  66001.27
3 229281.84 1206215.69 187282.96 330203.36 120562.75 106675.003 165003.16
4 114640.92   60310.78  24971.06 412754.21  71132.02   7111.667      0.00
5 716505.76   40207.19  87398.71 165101.68 723376.48  16001.250      0.00

然后使用:

{{1}}