createQueryBuilder条件oneToMany

时间:2018-01-18 12:47:36

标签: php mysql symfony

我正在使用Symfony 3.4我遇到了查询问题:

$qb = $this->createQueryBuilder('o')
    ->leftJoin('o.prices', 'p', 'WITH', 'p.dateEnd >= :now OR p.dateEnd IS NULL')
    ->setParameter('now', $nowDate);

return $qb->getQuery()->getResult();

所以,我有一个实体Offer o OneToMany Price p

我需要使用此查询仅在条件有效时获取优惠和价格:p.dateEnd >= :now OR p.dateEnd IS NULL

我在我的数据库中有2个价格,其中dateEnd = null,dateEnd = 2018-01-01 00:00:00,所以我预计只检索dateEnd = null的价格,但我的getResult()中有所有价格...

为什么?

我如何才能获得每个优惠的特定价格而不是所有价格?

谢谢!

编辑:这是我的sql:

SELECT o0_.id AS id_0
FROM offer o0_
  LEFT JOIN price p1_
    ON o0_.id = p1_.offerId
      AND (p1_.date_end >= ? OR p1_.date_end IS NULL)

enter image description here

2 个答案:

答案 0 :(得分:1)

答案是将$qb = $this->createQueryBuilder('o') ->leftJoin('o.prices', 'p') ->where('p.dateEnd >= :now OR p.dateEnd IS NULL') ->setParameter('now', $nowDate); return $qb->getQuery()->getResult(); 添加到查询中..不知道为什么!

答案 1 :(得分:0)

因为它是左连接,我认为你可以这样编写你的查询:

$string = "This is a test";
While(true) {
  substr($string,0,-1);
  if ($string = "") {
  $string = "This is a test"; 
  sleep(1);
  }
}