在Symfony 4项目中,我有一个名为#Value!
的实体,该实体通过ManytoOne关系链接到其他实体。这些实体之一是rendezvous
,我不想将用户数据与结果一起发送。如何使用学说查询构建器选择user
字段以外的所有字段?将关系放在user
实体而不是user
实体中是否更好。
这是我的实体:
rendezvous
这是我的查询构建器,它返回所有<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\RendezvousRepository")
* @ORM\Table("rendezvous")
*/
class Rendezvous
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User")
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Immeuble")
*/
private $immeuble;
/**
* @ORM\Column(type="datetime")
*/
private $creation_date;
}
:
rendezvous
编辑:通过以下DQL查询,我得到了想要的结果:
public function findAllByUser($user){
$qb = $this->createQueryBuilder('rdv');
$qb
->where('rdv.user = :user')
->setParameter('user', $user)
;
return $qb->getQuery()->getResult();
}
答案 0 :(得分:2)
您可以使用select
语句指定所需的内容:
public function findAllByUser($user) {
$qb = $this->createQueryBuilder('rdv');
$qb
->select('rdv.id')
->addSelect('rdv.immeuble')
->addSelect('rdv.creation_date')
->where('rdv.user = :user')
->setParameter('user', $user)
;
return $qb->getQuery()->getResult();
}
基本上,select
语句将覆盖以前选择的所有项目,因此您可以精确地提取所需的字段(与addSelect相对,后者不会覆盖以前的select调用)。 Documentation。
如果只需要有关user
的特定信息,则可以执行以下操作:
public function findAllByUser($user) {
$qb = $this->createQueryBuilder('rdv');
$qb
->select('rdv.id')
->addSelect('rdv.immeuble')
->addSelect('rdv.creation_date')
->join('rdv.user', 'u')
->addSelect('u.username')
->where('rdv.user = :user')
->setParameter('user', $user)
;
return $qb->getQuery()->getResult();
}