我正在尝试使用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']));
}
由于某种原因,我无法绕过这个。救命 !!任何人?
答案 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运算符。工作得很好。在要求之间也发生了变化。