Php 原则2按职能划分的命令
我正试着用Doctorine2v在Symfony2做这件事。2.1.7: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
$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版本中添加该功能。