教义2按功能排序

时间:2012-08-09 01:07:14

标签: php symfony doctrine-orm

我正在尝试使用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查询一样。但那部分让我陷入困境。

我可以尝试将其用于什么?

3 个答案:

答案 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