Php 原则2按职能划分的命令

Php 原则2按职能划分的命令,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,我正试着用Doctorine2v在Symfony2做这件事。2.1.7: $query = $this->em->createQuery( "SELECT a FROM ".$repo." a WHERE a.type_id = :typeid AND a.scenario = :scen AND a.contact_id = :cid

我正试着用Doctorine2v在Symfony2做这件事。2.1.7:

$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在ORDERBY子句中失败,因为它不喜欢其中的任何内容,除了列名和它出现的排序方向

我已经看过使用本机查询的文档,但这不起作用,因为此查询用于从多个表中提取数据(它位于我们使用的全局方法中),所以我无法进行映射,因为除了上面的where子句之外,其余的列名在表与表之间是不同的

我认为为了实现这一点,我需要一个真正的本机查询,它像所有其他非本机的DQL查询一样自动进行映射(水合?)。但那部分让我很为难


我该怎么做才能让它工作呢?

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

在已存储
子字符串(a.row\u type,4,1)的结果的地方创建另一列怎么样。G在插入时,映射该列并按其排序?无论如何,与为每行计算每个查询上的子字符串相比,它将更加高效。

尝试以下方法:

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

谢谢你的建议。正如你所说,这将非常有效。然而,在我的具体情况下,由于原始帖子中没有提到的原因,这变得比它的价值更难。我希望有一种数据库排序方法。是的,我现在在代码中确实这样做是为了让它工作,但这会让我胃痛。我希望我可以在数据库中按排序(需要时)执行排序。如果无法使用Doctrine 2,我将继续让PHP为我排序结果集,并希望在未来的Doctrine 2版本中添加该功能。