如何不选择多对一关系中的字段



在Symfony 4项目中,我有一个名为rendezvous的实体,它通过ManytoOne关系与其他实体链接。其中一个实体是user,我不想将用户的数据与结果一起发送。如何使用原则查询生成器选择除user字段以外的所有字段?将关系放在user实体中而不是放在rendezvous实体中是否更好。

这是我的实体:

<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
/**
* @ORMEntity(repositoryClass="AppRepositoryRendezvousRepository")
* @ORMTable("rendezvous")
*/
class Rendezvous
{
/**
* @ORMId()
* @ORMGeneratedValue()
* @ORMColumn(type="integer")
*/
private $id;
/**
* @ORMManyToOne(targetEntity="AppEntityUser")
*/
private $user;
/**
* @ORMManyToOne(targetEntity="AppEntityImmeuble")
*/
private $immeuble;
/**
* @ORMColumn(type="datetime")
*/
private $creation_date;
}

这是我返回所有rendezvous的查询生成器:

public function findAllByUser($user){
$qb = $this->createQueryBuilder('rdv');
$qb
->where('rdv.user = :user')
->setParameter('user', $user)
;
return $qb->getQuery()->getResult();
}

编辑:我通过以下DQL查询得到了我想要的结果:

public function findAllByUser($user){
$query = $this->_em->createQuery('SELECT rdv.id, i, rdv.creation_date FROM App:Rendezvous rdv JOIN App:Immeuble i WITH rdv.immeuble=i JOIN App:User u WITH u=:user');
$query->setParameter('user', $user);
return $query->getResult();
}

您可以使用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 相反,它不会覆盖以前的选择调用)。文档。

如果您只需要有关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();
}

相关内容

  • 没有找到相关文章

最新更新