2017-01-16 7 views
0

私は2つの日付の間、私のDBに検索クエリビルダを、持っています。 私は、検索00:00:00から23:59:59なければならないことを指定することはできません。 あなたは知っていますか、私はそれを置く必要がありますか?すべての私の試みはエラーに終わった。symfonyの検索

public function searchAction(Request $request){ 

// TODO MAXLIMIT

$defaultData = []; 
    $form = $this->createFormBuilder($defaultData) 
     ->add('from', DateType::class, [ 
      'widget' => 'single_text', 
      'format' => 'dd-MM-yyyy', 
      'attr' => [ 
       'class' => 'datepicker' 
      ] 
     ]) 
     ->add('to', DateType::class, [ 
      'widget' => 'single_text', 
      'format' => 'dd-MM-yyyy', 
      'attr' => [ 
       'class' => 'datepicker2' 
      ]]) 
     ->add('submit', SubmitType::class) 
     ->getForm(); 
    $form->handleRequest($request); 

    if ($form->isSubmitted() && $form->isValid()) { 
     $em = $this->getDoctrine()->getManager()->getRepository('BudgetBundle:Debit'); 



     $from = $form['from']->getData(); 
     var_dump($from); 
     $to = $form['to']->getData(); 
     $debits = $em->getByDate($from, $to); 
     return $this->render('@Budget/Views/search.html.twig', ['form' => $form->createView(), 'debits' => $debits]); 


    } 

私のレポ:

public function getByDate($from, $to){ 



    $qb = $this->createQueryBuilder("d"); 
    $qb 
     ->where('d.date BETWEEN :from AND :to') 
     ->setParameter('from', $from->format('d-MM-yy' . '00:00:00')) 
     ->setParameter('to', $to); 
    return $result = $qb->getQuery()->getResult(); 

} 

JSビュー:

<script> 
$(function() { 
    $("#form_from").datepicker({ 
     firstDay: 1, 
     altField: "#datepicker", 
     closeText: 'Fermer', 
     prevText: 'Précédent', 
     nextText: 'Suivant', 
     currentText: 'Aujourd\'hui', 
     monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'], 
     monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'], 
     dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'], 
     dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'], 
     dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'], 
     weekHeader: 'Sem.', 
     dateFormat: 'dd-mm-yy'}); 
    $("#form_to").datepicker({ 
     firstDay: 1, 
     altField: "#datepicker", 
     closeText: 'Fermer', 
     prevText: 'Précédent', 
     nextText: 'Suivant', 
     currentText: 'Aujourd\'hui', 
     monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'], 
     monthNamesShort: ['Janv.', 'Févr.', 'Mars', 'Avril', 'Mai', 'Juin', 'Juil.', 'Août', 'Sept.', 'Oct.', 'Nov.', 'Déc.'], 
     dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'], 
     dayNamesShort: ['Dim.', 'Lun.', 'Mar.', 'Mer.', 'Jeu.', 'Ven.', 'Sam.'], 
     dayNamesMin: ['D', 'L', 'M', 'M', 'J', 'V', 'S'], 
     weekHeader: 'Sem.', 
     dateFormat: 'dd-mm-yy'}); }); 
ここ

は私のコントローラであり、

+1

まず、DateTime操作では、「Carbon' http://carbon.nesbot.com/」を使用することをお勧めします。 –

答えて

0

、適切な時間を追加し、その後、最初の日付の書式を設定します。日付と時刻の間にスペースがあることを確認してください。

$qb 
    ->where('d.date BETWEEN :from AND :to') 
    ->setParameter('from', $from->format('Y-m-d') . ' 00:00:00') 
    ->setParameter('to', $to->format('Y-m-d') . ' 23:59:59'); 
+0

大変! 答えはスペースでした!どうもありがとう ! – Emnoze

0

あなたは、クエリパラメータのためにあなたの機能に不整合があるようです。
試してください。

public function getByDate($from, $to){ 
    $qb = $this->createQueryBuilder("d"); 
    $qb 
     ->where('d.date BETWEEN :from AND :to') 
     ->setParameter(':from', $from->format('d-MM-yy' . '00:00:00')) 
     ->setParameter(':to', $to); 
    return $result = $qb->getQuery()->getResult(); 

} 

また、日付形式をチェックするだけで、重複しません。ほとんどのデータベースは、正しい形式はまた->setParameter(':from', $from->format('Y-m-d 00:00:00') になるので、あなたは一日中たい場合は、理由を次の日になるとどこ大きいかからに等しいを行うには、日付にあなたを調整しない、YYYY-MM-DD形式で日付を保存します〜する。 など。

public function getByDate(\DateTime $from, \DateTime $to) { 
    $end = clone $from; 
    $end->modify('+1 day'); 
    $qb = $this->createQueryBuilder("d"); 
    $qb 
     ->where('d.date >= :from AND d.date < :end') 
     ->setParameter(':from', $from->format('Y-m-d 00:00:00')) 
     ->setParameter(':end', $end->format('Y-m-d 00:00:00'); 
    return $result = $qb->getQuery()->getResult(); 
} 
+0

はご協力いただきありがとうございます;) 私は1日のそしてそれは、今の仕事:) 倍数の日のために結果を持っている必要があります! – Emnoze

0

のDateTime操作のためのまず第一に、私はCarbonhttp://carbon.nesbot.com/を使用することをお勧めします。あなたの質問に答えるために

:あなたは、クエリが時間に依存しない場合は、2日を比較し、

は大丈夫です。あなたが時間にも依存する場合は、DateTimeが必要です。あなたのレポで

関連する問題