繁体   English   中英

Symfony2在学说中选择一列

[英]Symfony2 Select one column in doctrine

我正在尝试优化查询以尝试选择更少的可能值。例如,我有一个实体“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);

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

由于您要求每个记录的单个列,您必然会遇到一个array 话虽如此,你应该用getArrayResult()替换getResult ,因为你不能强制执行对象水合:

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

希望这可以帮助。

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

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

这对我有用:

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

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

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

将您的字段名称放在括号中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM