我正尝试在Doctrine2 v2.1.7的Symfony2中做到这一点:
$query = $this->em->createQuery(
"SELECT a
FROM ".$repo." a
WHERE a.type_id = :typeid
AND a.scenario = :scen
AND a.contact_id = :cid
AND a.row_type LIKE :rwtp
ORDER BY SUBSTRING(a.row_type, 4, 1) "
)->setParameters(
array(
'typeid' =>$sesData['type_id'],
'scen' =>$sesData['scenario'],
'cid' =>$sesData['contact_id'],
'rwtp' =>'%.'.$whereVal.'%'
)
);
$customValues = $query->getResult();规则2在ORDER BY子句上失败了,因为它不喜欢其中的任何内容,除了它显示的列名和排序方向。
我已经查看了使用原生查询的文档,但这不起作用,因为这个查询用于从多个表中提取数据(它位于我们使用的一个全局方法中),所以我不能做这种映射工作,因为除了上面的where子句之外,其余的列名在每个表中都是不同的。
我认为为了实现这一点,我需要一个真正的原生查询来执行映射(水合?)自动像所有其他非本机DQL查询一样。但这部分让我很为难。
我该怎么做才能让它工作呢?
发布于 2012-08-09 20:06:50
如何创建另一个列来存储SUBSTRING(a.row_type, 4, 1)的结果,例如,在插入时,映射该列并按其排序?无论如何,与在每个查询上计算每行的子字符串相比,它的效率要高得多。
发布于 2012-08-09 16:04:09
虽然效率较低,但您是否考虑过在从数据库中获取结果后,自己使用php排序函数对结果进行排序?如果您的结果集不是很大,这可能是一种明智的方法。
发布于 2012-08-11 18:41:07
试试这个:
SELECT a, SUBSTRING(a.row_type, 4, 1) AS row_type
FROM ".$repo." a
WHERE a.type_id = :typeid
AND a.scenario = :scen
AND a.contact_id = :cid
AND a.row_type LIKE :rwtp
ORDER BY row_typehttps://stackoverflow.com/questions/11875419
复制相似问题