zend framework 2和doctrine查询构建器

时间:2013-11-21 21:46:20

标签: php doctrine-orm zend-framework2 query-builder

我正在尝试使用doctrine查询构建器根据我从数组中获取的参数编写查询。

这是我的数组,

$query = array('field' => 'number,
                            'from' => '1',
                                'to'  => '100',
                                    'Id' => '2',
                                        'Decimation' => '10'
                           );

我想写的查询是,

  

select * from table where (number between 1 AND 100) AND (Id = 2) AND number mod 10 = 0

这是我现在所处的位置,

if (is_array($parameters['query'])) {
        $queryBuilder->select()
                      ->where(
                              $queryBuilder->expr()->between($parameters['query']['field'], $parameters['query']['from'], $parameters['query']['to']),
                              $queryBuilder->expr()->eq('Id', '=?1'),
                              $queryBuilder->expr()->eq($parameters['query']['field'],'mod 10 = 0') 
                            )
                     ->setParameter(array(1 => $parameters['query']['Id']));
    }

由于某种原因,我无法绕过这个。救命 !!任何人?

2 个答案:

答案 0 :(得分:1)

未经测试或任何其他内容,只需直接输入SO答案框:

$queryBuilder->select('table')
    ->from('My\Table\Entity', 'table')
    ->where($queryBuilder->expr()->andX(
        $queryBuilder->expr()->between('table.number', ':from', ':to'),
        $queryBuilder->expr()->eq->('table.id', ':id'),
    ))
    ->andWhere('MOD(table.number, :decimation) = 0')
    ->setParameters(array(
        'from' => $parameters['query']['from'],
        'to' => $parameters['query']['to'],
        'id' => $parameters['query']['id'],
        'decimation' => $parameters['query']['decimation']
   ));

它不会动态地让您设置应用where条件的字段。但是,如果不将您想要允许的值列入白名单,这很可能是一个坏主意。完成此操作后,只需对上面的代码进行简单修改(只需在number字符串中插入值代替table.number

答案 1 :(得分:0)

我知道了,

这里的主要思想是使用andWhere子句。多个where子句是我想要的。以及教义给出的mod运算符。工作得很好。在要求之间也发生了变化。