Symfony2在学说中选择一列

时间:2013-02-23 23:24:08

标签: symfony doctrine-orm symfony-2.1

我正在尝试优化查询,尝试选择较少的可能值。 例如,我有一个实体“Anagrafic”,其中包含您的姓名,地址,城市等, 以及我只想更改其中一个字段的表单,例如地址。 我创建了这个查询:

//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);

返回正确的值。 如何仅选择一列进行查询?

4 个答案:

答案 0 :(得分:13)

由于您要求每条记录的单列,您必然会遇到array。话虽如此,您应该将getResult替换为getArrayResult(),因为您无法强制执行对象保湿:

$data = $qb->getArrayResult();
Now, you have structure:
    $data[0]['address']
    $data[1]['address']
    ....

希望这会有所帮助。

关于评论中的性能的讨论,我通常同意你的意思,因为不希望每次都进行30次列提取。但是,在这种情况下,您应该考虑编写命名查询,以便在数据库被更改时将影响降至最低。

答案 1 :(得分:7)

您可以使用partial objects仅水合一个字段并仍然返回一个对象。

答案 2 :(得分:3)

这对我有用:

  $qb = $repository->createQueryBuilder('i')
    ->select('i.name')
    ->...

答案 3 :(得分:2)

使用这样的部分对象来选择字段

$qb = $this->createQueryBuilder('r')
    ->select(array('partial r.{id,address}'))
    ...

将字段名称放在方括号

之间