Symfony2在条令中选择一列

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')

我试图优化查询,试图选择更少的可能值​​.. 例如,我有一个实体“Anagrafic”,其中包含您的姓名、地址、城市等。, 我只想更改其中一个字段的表单,例如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列在性能上要好得多!那么你会在任何地方都这样做吗?在这种情况下,我最好把你的桌子分开几张。我认为这是提高性能的好方法!如果你不同意也没关系。真的非常感谢你的帮助!这正是我要找的信息!。。。但请记住文档更新链接:请将所有相关信息添加到答案中,而不是链接到外部页面