如何将集合的第一项放入 DQL

How to get first item of collection into DQL

在我的数据库中,我有两个表 Booking 和 Week。 A Booking 与 Week 是一对多的关系。

进入一周我有一个 "start" 和一个 "end" 两个 Datetime

我想要select所有在 45 天内开始的预订(编辑),但我不能'找不到如何实现这一点。

这是我写的:

$bookings = $doctrine->getRepository('MyBundle:Booking')
   ->createQueryBuilder('b')
   ->where('DATE_DIFF(CURRENT_DATE(), b.weeks) <= 45')
   ->getQuery()->getResult();

当然这是行不通的,因为b.weeks是集合。而不是 "weeks" 我需要获得第一周(也就是 "start" 最低的一周)。

你能帮我做这个吗?

PS:我无法执行 findAll 然后过滤,因为数据库中有超过 20.000 个预订....

您可以在开始日期时间执行 where 时加入周实体

$booking = $doctrine->getRepository('MyBundle:Booking')
   ->createQueryBuilder('b')
   ->join('b.weeks', 'w')
   ->where('w.start <= :start')
   ->setParameter(':start', new \DateTime('+45 days'))
   ->orderBy('w.start', 'ASC')
   ->getQuery()->getResult();

这会给你排序查询的第一个结果......我没有运行这个来确保它有效......但它会给你一个想法..这解决了"weeks" 是一个集合的问题 .. 使用这种方法,您可以在一周的开始并设计一个与您的应用程序匹配的逻辑。