[英]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.