2015-05-20 51 views
0

我需要在我的系统的DQL查询中包含一个带有LIMIT子句的子查询。由于Doctrine不支持它,我将它改为原生查询。然而,本机查询正在返回小写字段而不是正确的大小写。 案件是,因为这是工作代码,我有一些视图取决于这个名称,并且更改所有名称更难。如何在正确的情况下返回字段名称

但我在这里发现http://bit.ly/1Ht1ojH,这方面可以在Doctrine中配置。所以,我想这个代码:

$conn = $this->getConnection(); 
$conn->setAttribute(Doctrine_Core::ATTR_FIELD_CASE, CASE_NATURAL); 
$res = $conn->query("select MyCasedField from whatever")->fetchAll(); 

但我得到的错误“试图调用方法‘的setAttribute’阶级‘学说\ ORM \ EntityManager的’

我与经理企图也同样的结果。 。

现在,我现在我可以做一些代码翻译的领域,但我发现,配置解决方案,更加干净。

有人知道这是为什么symfony中没有让我配置的连接?

此外,如果在DQL的子查询中有任何使用LIMIT的方法,我会发现它更好。

+0

这并不能帮助你直接,我知道,但是我上次碰到“在子查询中没有DQL限制”的问题时,我实际上重新建模了数据库。对于我来说,与原生查询的回落相比,这是两个邪恶中较小的一个。 –

+0

其实我在使用原生查询时没有问题。我认为这是一种错觉,试图编写一个独立于数据库的应用程序。您总是更好地使用数据库的全部功能,而不是使用可用跨数据库的功能子集。 –

+1

哦,我不是说从“数据库独立”的角度来看,而是从ORM的坚持观点来看。一旦你调用一个本地查询,你已经引入了不能用映射数据跟踪的数据模型的事务。如果你坚持使用这些实体,那么就可以使用模式工具来识别更改并进行单元测试。 对我来说这不是一个“永不做”的场景,但它肯定会带来一点维护风险,所以在走下这条路之前我总是三思而后行。 –

回答

0

DQL中没有LIMIT关键字。要使用此功能,您可以在查询对象上调用方法setMaxResults($limit)。它也可以应用于查询生成器。

$query = $this->getEntityManager() 
     ->createQuery('SELECT p FROM Product p') 
     ->setMaxResults($limit); 
+0

我知道。我读过我的问题的最初部分,我写道学说不支持它。我需要的是一个子查询的限制解决方案,而不是主查询。 –

相关问题