2

我正在尝试使用 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 查询一样自动进行映射(水合?)。但那部分让我受阻。

我可以尝试什么来使它正常工作?

4

3 回答 3

1

如何创建另一个列,您已经存储了SUBSTRING(a.row_type, 4, 1)例如插入时的结果,映射该列并按此排序?无论如何,与为每一行的每个查询计算子字符串相比,它会更有效。

于 2012-08-09T12:06:49.677 回答
0

它的效率会降低,但是您是否考虑过在从数据库中取回结果后使用其中一个 php 排序函数自己对结果进行排序的可能性?如果您的结果集不是很大,这可能是一种明智的方法。

于 2012-08-09T08:04:08.567 回答
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
于 2012-08-11T10:41:07.450 回答