在我的数据库中,我有两张桌子预订&周。预订与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个预订到数据库....
答案 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;作为一个集合..使用这种方法,你可以到达一周的开始,并设计一个与你的应用程序匹配的逻辑。