Symfony2在条令中选择一列
我试图优化查询,试图选择更少的可能值.. 例如,我有一个实体“Anagrafic”,其中包含您的姓名、地址、城市等。, 我只想更改其中一个字段的表单,例如address。 我已创建此查询:Symfony2在条令中选择一列,symfony,doctrine-orm,symfony-2.1,Symfony,Doctrine Orm,Symfony 2.1,我试图优化查询,试图选择更少的可能值.. 例如,我有一个实体“Anagrafic”,其中包含您的姓名、地址、城市等。, 我只想更改其中一个字段的表单,例如address。 我已创建此查询: //AnagraficRepository public function findAddress($Id) { $qb = $this->createQueryBuilder('r') ->select('r.address')
//AnagraficRepository
public function findAddress($Id)
{
$qb = $this->createQueryBuilder('r')
->select('r.address')
->where('r.id = :id')
->setParameter('id', $Id)
->getQuery();
return $qb->getResult();
}
此查询有问题,因为我没有返回任何值,但如果我正常执行查询:
//Controller
$entity = $em->getRepository('MyBusinessBundle:Anagrafic')->find($id);
返回正确的值。
如何执行仅选择一列的查询?由于您请求的是每条记录的单个列,因此您必然希望得到一个
数组。也就是说,您应该将getResult
替换为getArrayResult()
,因为您无法强制执行对象:
$data = $qb->getArrayResult();
Now, you have structure:
$data[0]['address']
$data[1]['address']
....
希望这有帮助
至于评论中关于性能的讨论,我大体上同意你的看法,因为我不希望每次都获取所有30列。但是,在这种情况下,您应该考虑编写命名查询,以便在数据库被更改时最小化影响。 您可以仅使用水合物一个字段并返回一个对象。 使用这样的部分对象来选择字段
$qb = $this->createQueryBuilder('r')
->select(array('partial r.{id,address}'))
...
将字段名放在括号中这对我很有用:
$qb = $repository->createQueryBuilder('i')
->select('i.name')
->...
我的目标是减少查询的大小,返回单个列比返回30列在性能上要好得多!那么你会在任何地方都这样做吗?在这种情况下,我最好把你的桌子分开几张。我认为这是提高性能的好方法!如果你不同意也没关系。真的非常感谢你的帮助!这正是我要找的信息!。。。但请记住文档更新链接:请将所有相关信息添加到答案中,而不是链接到外部页面