2016-07-01 5 views
0

私のDBには2つのテーブルがあります。予約&週間。予約は週と1対多の関係にあります。週の中へコレクションの最初のアイテムをDQLに取得する方法

私が持っている「開始」と「終了」の両方の日時

私は45日未満で起動すべての予約(編集)を選択したいと思いますが、私は見つけることができませんこれを実現する方法。

は、ここで私が書いたものだ:b.weeksが集まりですので

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

はもちろん、これは動作しません。 「週」の代わりに、私は最初の週(一番低い「開始」の週)を取得する必要があります。

どうすればよろしいですか?

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

私はあなたの解決策をできるだけ早くテストします。私も小さな編集をしました。私はすべての予約(1つだけではない)を選択したいと思います。あなたのソリューションが多くの結果に役立つかどうかはわかりません。 – CyrilleGuimezanes

+0

私は編集しました.. get resultはすべての結果を返します... – Drmjo

関連する問題