php - 在学说查询的结果中包含相关实体值

标签 php doctrine-orm

我正在执行 Doctrine 查询,结果包括查询实体的属性,但它不会“跟随”并获取相关实体的值。

例如我在 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_contratopais 等)都存在,并且这些关系可用于过滤查询数据。

但是我的 $query->getQuery()->getArrayResult() 表达式的结果不包含这些关系中的数据。

它甚至不会包含该字段中的 id。例如,对于任何一条记录,它将仅包含以下字段:

  • ID
  • 替代
  • 名字”
  • nombreAlt
  • 描述
  • 波布拉西翁
  • 空缺
  • horarioIni
  • horarioFin
  • 网址
  • 标签
  • 克雷多
  • caducidad
  • 修改
  • 消除
  • 激活

这些都是有效字段,但不包括任何多对一关系的字段。

如何为该查询包含这些值,并且仅针对该查询?例如。不更改实体定义,因此所有查询都会受到影响?

最佳答案

只要看看: $query->select('o'); 我想说(从 SQL 的角度考虑)这就是您所选择的。里面加点逗号吧我会尝试这样的事情:

$query->select('o', 'p', 'c');

我第一次尝试做的应该是一个数组。不像我展示的那样是逗号分隔的字符串。查看来源:

$selects = is_array($select) ? $select : func_get_args();

因此数组或参数列表都应该有效。

更新:

也许您只是缺少来自?完全错过了。在这里我将分享一些我知道有效的代码。也许你会看到一些东西。很确定您只需要一个 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();

关于php - 在学说查询的结果中包含相关实体值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45805885/

相关文章:

php - Zend/Doctrine 无法执行 ORM 操作,表已经存在

doctrine-orm - 根据 1-n 关联中 1 项的属性限制查询结果

symfony - Doctrine ordering to many associations and matching Criteria

PHP Curl for Rest API 不起作用

php - 在 Doctrine/Symfony 3 中创建类似 SQL 触发器的东西

symfony - Doctrine DQL 从关系表中删除

php - PayPal - 使用 php 加密多项目自定义购物车动态结帐按钮

php - UsersController::beforeFilter() 的声明应该与 AppController::beforeFilter(Cake\Event\Event $event) 兼容

PHP 关键字搜索

php - 为什么 mysql 不能用我的 php 脚本查询?