我正在进行一个Doctrine查询,结果包括查询实体的属性,但不是“跟随”并获取相关实体的值。
E.g。我在OfertaRepository
:
$query = $this->createQueryBuilder('o');
$query->select('o');
$query->leftJoin(Pais::class, 'p', 'with', 'o.idPais = p.id');
$query->leftJoin( Contrato::class, 'c', 'with', 'o.idTipoContrato = c.id');
$query->andWhere('p.nombreCorto = :pais');
$query->andWhere('o.activa = 1');
$query->andWhere('o.eliminado is NULL');
$query->andWhere('o.caducidad > :hoy');
$query->setParameter('pais', $pais)->setParameter('hoy', new \DateTime());
return $query->getQuery()->getArrayResult();
实体Oferta
具有:
/**
* @var \Application\Entity\Pais
*
* @ORM\ManyToOne(targetEntity="Application\Entity\Pais")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_pais", referencedColumnName="id", nullable=true)
* })
*/
private $idPais;
/**
* @var \Application\Entity\TipoContrato
*
* @ORM\ManyToOne(targetEntity="Application\Entity\TipoContrato")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_tipo_contrato", referencedColumnName="id", nullable=true)
* })
*/
private $idTipoContrato;
例如,所有引用的表(tipo_contrato
,pais
等)都存在,并且关系可用于过滤查询数据。
但是$query->getQuery()->getArrayResult()
表达式的结果不包含这些关系中的数据。
它甚至不包含此字段中的ID。例如,对于任何一条记录,它只包括这些字段:
哪些都是有效字段,但不包含任何多对一关系的字段。
如何为此查询包含这些值,仅针对此查询?例如。在不更改实体定义的情况下,所有查询会受到影响吗?
答案 0 :(得分:2)
只看:$query->select('o');
我会说(就SQL而言)是你所选择的。在那里得到一些逗号。我会尝试这样的事情:
$query->select('o', 'p', 'c');
我第一次尝试做的应该是一个数组。不是像我所示的逗号分隔的字符串。见来源:
$selects = is_array($select) ? $select : func_get_args();
因此,数组或参数列表都应该有用。
<强>更新强>
也许你只是错过了from
?完全错过了。在这里,我将分享一些我知道可行的代码。也许你会看到一些东西。很确定你只需要一个from
子句和select
部分的多个obj引用。
$qb = $this->_em->createQueryBuilder();
$qb->select('aimg', 'ai');
$qb->from('OAS\Entity\AuctionImage', 'aimg');
$qb->leftJoin('aimg.auctionItem', 'ai', \Doctrine\ORM\Query\Expr\Join::WITH, 'ai.lotNumber = aimg.lotNumber AND ai.auction = aimg.auction');
$qb->where('aimg.auction = :auction')->setParameter('auction', $this->_auction);
$qb->andWhere('aimg.isDeleted = :boolFalse')->setParameter('boolFalse', 0);
$qb->andWhere('aimg.auctionItem IS NULL');
$qb->orderBy('aimg.lotNumber', 'asc');
$results = $qb->getQuery()->getResult();