如何将第一个收集项目放入DQL

时间:2016-07-01 09:58:38

标签: symfony dql

在我的数据库中,我有两张桌子预订&周。预订与Week有一对多的关系。

进入周我有一个“开始”和“结束”两个日期时间

我想选择 所有预订(编辑) ,这些预订在不到45天的时间内开始,但我找不到如何实现这一目标。

这是我写的:

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

当然这不起作用,因为b.weeks是收藏品。而不是“周”,我需要得到第一周(也就是最低“开始”的一周)。

你能帮我这么做吗?

PS:我不能做一个findAll然后过滤,因为有超过20,000个预订到数据库....

1 个答案:

答案 0 :(得分:1)

您可以在开始日期时间的位置加入星期实体

$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();

这将为您提供排序查询的第一个结果...我没有运行它以确保它有效......但它会给你一个想法..这解决了&#34;周&#34;作为一个集合..使用这种方法,你可以到达一周的开始,并设计一个与你的应用程序匹配的逻辑。