将datetime变量传递给Doctrine查询的正确方法是什么?

时间:2016-01-17 11:52:03

标签: datetime doctrine-orm symfony

我正在寻找填充包含发票表的页面的正确方法,该发票表可以通过两个datepicker字段进行过滤以定义日期范围。

目前,我正在尝试将$min$max日期作为路由参数传递,但不确定这是否是最佳方式?

我现在的控制人是:

/** *********************************************************************************************
 * @Route("/invoices/view/monthly-{min}-{max}"  ,name="view_monthly_invoices", defaults={"min"="2015-01-16", "max"="2016-01-17"})
 ********************************************************************************************** */
public function viewMonthlyInvoicesAction(Request $request, \DateTime $min, \DateTime $max)
{
    $em = $this->getDoctrine()->getManager();
    $invoicesinrange = $em->getRepository('AppBundle:Invoice')->invoicesWithinDates($min, $max);

    return $this->render('invoices/view.daterange.invoices.html.twig', array(
        'dues' => $invoicesinrange,
        'min'=>$min,
        'max'=>$max,
    ));

我的存储库查询是:

public function invoicesWithinDates($min,$max)
{
    return $this->createQueryBuilder('i')
        ->select('i', 'p','g')
        ->leftJoin('i.payment_ids', 'p')
        ->leftJoin('i.member_id','m')
        ->andWhere('i.invoicedate > :min')
        ->andWhere('i.invoicedate < :max')
        ->addOrderBy('m.surnamename1', 'ASC')
        ->addOrderBy('m.surnamename2', 'ASC')
        ->setParameter('min', $min)
        ->setParameter('max', $max)
        ->getQuery()
        ->getResult();
}

例如,当我转到/invoices/view/monthly时,上面的代码正在加载页面确定。 $min$max都正确地返回默认的日期时间对象,但$dues总是会被所有发票填充,而不仅仅是在{日期范围。

2 个答案:

答案 0 :(得分:0)

尝试格式化日期,如下所示:

...
->setParameter('min', $min->format('Y-m-d'))
->setParameter('max', $max->format('Y-m-d'))
...

答案 1 :(得分:0)

试试这个:

->where('i.invoicedate > :min AND i.invoicedate < :max')