Symfony2在学说中选择一列

Lug*_*ino 6 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();
}
Run Code Online (Sandbox Code Playgroud)

此查询有问题,因为我没有返回任何值,但如果我正常执行查询:

//Controller
$entity = $em->getRepository('MyBusinessBundle:Anagrafic')->find($id);
Run Code Online (Sandbox Code Playgroud)

返回正确的值.如何只选择一列查询?

Jov*_*vic 13

由于您要求每条记录的单列,您必然会遇到array.这就是说,你应该更换getResult使用getArrayResult(),因为你不能强制对象水化:

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

希望这可以帮助.

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


Bra*_*sen 7

您可以使用部分对象仅水合一个字段并仍然返回一个对象.

  • 谢谢!这也是一个很好的解决方案! (2认同)