我正在尝试使用Doctrine2 v.2.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();
Doctrine 2在ORDER BY子句上失败,因为除了列名和排序方向外,它不喜欢其中的任何内容。
我查看了使用本机查询的文档,但这不起作用,因为此查询用于从多个表中提取数据(它位于我们使用的全局方法中)所以我不能这样做映射东西,因为除了上面的where子句之外,其余列名在表与表之间是不同的。
我认为,为了解决这个问题,我需要一个真正的本机查询来自动执行映射(水合?),就像所有其他非本机的DQL查询一样。但那部分让我陷入困境。
我可以尝试将其用于什么?
答案 0 :(得分:1)
如何创建另一个已存储SUBSTRING(a.row_type, 4, 1)
e结果的列。 G。在插入,映射该列和顺序?无论如何,与在每行的每个查询上计算子字符串相比,它会更有效率。
答案 1 :(得分:0)
它的效率会降低,但您是否考虑过从数据库中取回后使用其中一个php排序函数自行对结果进行排序的可能性?如果你的结果集不是很大,这可能是一种明智的方法。
答案 2 :(得分:0)
试试这个:
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_type