如何将集合的第一项放入 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" 是一个集合的问题 .. 使用这种方法,您可以在一周的开始并设计一个与您的应用程序匹配的逻辑。
在我的数据库中,我有两个表 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" 是一个集合的问题 .. 使用这种方法,您可以在一周的开始并设计一个与您的应用程序匹配的逻辑。