2016-07-01 47 views
0

在我的數據庫中我有兩個表格Booking & Week。預訂與周有一對多的關係。如何將第一個項目收集到DQL中

進入周我有一個「開始」和「結束」兩個日期時間

我想選擇,在不到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

getFirstResult()不適合您的情況? – Freelancer

+0

不,因爲,現在這個查詢會拋出一個異常,因爲我可以在日期和集合之間做一個date_diff。 – CyrilleGuimezanes

回答

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

這會給你一個排序查詢的第一個結果......我沒有運行它來確保它能夠正常工作......但它會給你一個想法..這解決了「星期「作爲一個集合..用這種方法,你可以到一週的開始,並設計一個符合你的應用程序的邏輯。

+0

我會盡快測試您的解決方案。我也做了一個小小的編輯,我想選擇所有的預訂(不只一個)。我無法弄清楚你的解決方案是否適用於許多結果。 – CyrilleGuimezanes

+0

我編輯..得到結果將返回所有結果... – Drmjo

相關問題