我有一个问题困扰了我一段时间。我正在使用Doctrine 2.0来处理我正在进行的一些项目,而且我遇到了一些棘手的问题。
在前端应用程序的大多数项目中,我正在为数组而不是对象保湿;我的意思是,当我产生一个学说查询时,我可能会这样做:
$entityManager = $this->getEntityManager();
$query = $entityManager->getQueryBuilder();
$query->select('something', 'somethingElse')
->from('My\Entity\Location', 'something')
->leftJoin('something.somethingelse', 'somethingElse')
->where('something.id = :someId')
->setParameter('someId', $someId)
->getQuery();
$result = $query->getArrayResult();
现在这就是我正在为我们应用程序前端的所有代码所做的事情,因为对数组进行保湿比对对象保湿要快得多。现在我的问题是:如果我使用Doctrine,我是不是真的使用getResult()
然后将实体返回到视图并与它们进行交互?
当我在管理区域中说出来并且我正在对实体进行更改时,我使用getResult
或getSingleResult
;然而,使用非常沉重的Doctrine只是为了将信息检索到前端的数组中感觉有点奇怪 - 无论如何我可以用简单的PDO做什么?!
希望我的问题足够明确。
汤姆
答案 0 :(得分:2)
Doctrine进行了额外的验证,使连接条件更容易编写。这种便利可能不是免费的,但在考虑长期维护时可能仍然很好。如果你担心性能,我会建议你做一些分析,看看它有多贵。当在Doctrine中启用所有缓存时,它不会比直接查询昂贵得多。
如果您真的需要额外的性能提升,直接进入SQL没有任何问题,但是我会建议您在通过性能分析确定这是问题所在的证据之前进行优化。