如何以所需顺序从查询中获取参数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以所需顺序从查询中获取参数?相关的知识,希望对你有一定的参考价值。
我试图在queryBuilder之后修改SQL查询来执行本机查询。所以我得到了我的查询
$queryBuilder->getQuery()->getSQL()
我的查询看起来像这样
SELECT p0_.id AS id_0 FROM ptable p0_ WHERE p0_.code = ? AND p0_.item_id IN (?)
但
$parameters = $queryBuilder->getQuery()->getParameters()
返回参数以便添加它们,但不返回它们在sql查询中的显示方式。是否存在以正确顺序获取参数的方法?
参数大致类似于['code', [1,2,3]]
或[[1,2,3], 'code']
- 在添加订单时订购依赖项。
***更新。我想做什么
$newParameters = [];
foreach ($queryBuilder->getQuery()->getParameters() as $parameter) {
$newParameters[count($newParameters) + 1] = $parameter->getValue();
}
$nativeQuery =
$this->_em
->createNativeQuery('SELECT count(*) countItem FROM ('.$queryBuilder->getQuery()->getSQL().') tmp', $rsm)
->setParameters($newParameters);// params order does matter
答案
我很快就看到了你的问题,我做了一个测试案例,做了你想做多次的事情。但是,我没有像你那样设法获得随机顺序。
您使用的是任何框架,还是开箱即用的Doctrine?以下示例在Symfony 2.8中使用Doctrine。
使用createQueryBuilder()
$qb = $em->createQueryBuilder()
->select('p.id')
->from('ABCBundle:PTable', 'p')
->where('p.name = :p_name')
->setParameter('p_name', 'Test Data')
->andWhere('p.order IN (:p_order)')
->setParameter('p_order', array(4,5,6))
->getQuery();
这个print_r($qb->getSQL());
和print_r($qb->getParameters());
给我以下结果,它一直是一致的,
SELECT f0_.id AS ID0 FROM p_table f0_ WHERE f0_.name = ? AND f0_.order IN (?)DoctrineCommonCollectionsArrayCollection Object
(
[elements:DoctrineCommonCollectionsArrayCollection:private] => Array
(
[0] => DoctrineORMQueryParameter Object
(
[name:DoctrineORMQueryParameter:private] => name
[value:DoctrineORMQueryParameter:private] => Test Data
[type:DoctrineORMQueryParameter:private] => 2
)
[1] => DoctrineORMQueryParameter Object
(
[name:DoctrineORMQueryParameter:private] => order
[value:DoctrineORMQueryParameter:private] => Array
(
[0] => 4
[1] => 5
[2] => 6
)
[type:DoctrineORMQueryParameter:private] => 101
)
)
)
使用createNativeQuery()
$sql = 'SELECT p.id AS ID0 FROM p_table p WHERE p.name = :name AND p.order IN (:order)';
$rsm = new DoctrineORMQueryResultSetMapping();
$query = $em->createNativeQuery($sql, $rsm);
$query->setParameter('name', 'Test Data');
$query->setParameter('corder', array(4,5,6));
print_r($query->getSQL());
print_r($query->getParameters());
上面的顺序将始终是您使用setParameter()
设置的参数顺序。
我希望这有帮助。谢谢。
以上是关于如何以所需顺序从查询中获取参数?的主要内容,如果未能解决你的问题,请参考以下文章
使用 xmlagg 函数的 SQL 多 SELECT 查询 - 未以所需方式提取数据
使用php从mysql数据库中获取数据,以所见即所得的形式显示以进行编辑