【问题标题】:Comparing dates results with Doctrine将日期结果与 Doctrine 进行比较
【发布时间】:2019-01-21 14:22:03
【问题描述】:

我用表单生成器编写了一个 api 调用,它创建了两个日期字段。这个想法是选择两个日期并从该日期范围内的数据数据库中返回结果。

我找不到问题出在哪里,但我认为查询生成器中的语法不正确。

我没有收到任何错误,只是一个空数组。

这是来自服务的 api 调用

public function getTransaction()
{
    $result = $this->getTransactionRepository()
        ->createQueryBuilder('a')
        ->select('a')
        ->where('a.date >= :from')
        ->andWhere('a.date <= :to')
        ->setParameter('from', $date->format('Y-m-d H:i:s'))
        ->setParameter('to',   $date->format('Y-m-d H:i:s'))
        ->orderBy('p.id')
        ->getQuery()
        ->getArrayResult();

    return $result;
}

我的控制器

$form = $this->createFormBuilder()
        ->add('dateFrom', DateType::class, array(
            'widget' => 'single_text',
            'attr' => array(
                'dateFrom' => (new \DateTime())->format('Y-m-d'),
            )))
        ->add('dateTo', DateType::class, array(
            'widget' => 'single_text',
            'attr' => array(
                'dateTo' => (new \DateTime())->format('Y-m-d'),
            )))
        ->add('submit', SubmitType::class, array('label' => 'Send', 'attr' => [
            'class' => 'btn-link form-btn'
        ]))
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {

        $transactions = $this->get('app')->getTransaction();
    }

    return $this->render('default/finance.html.twig',
        array('form' => $form->createView(), 't' => $t)
    );
}

和我的树枝视图

                <tbody>
                    <tr>
                        <th>ID</th>
                        <th>User</th>
                        <th>Info</th>
                        <th>Name</th>
                    </tr>
                    {% for a in t %}
                        <tr>
                            <td>{{ a.id }}</td>
                            <td>{{ a.user }}</td>
                            <td>{{ a.info }}</td>
                            <td>{{ a.name }}</td>
                        </tr>
                {% endfor %}
                </tbody>`

【问题讨论】:

  • 'dateTo' =&gt; (new \DateTime())-&gt;format('Y-m-d'), 这些已设置,但是,$this-&gt;get('app')-&gt;getTransaction() 不会收到您的 ToFrom 日期。你不应该做$this-&gt;get('app')-&gt;getTransaction($from, $to)getTransaction-&gt;setParameter('from', $from-&gt;format('Y-m-d H:i:s'))(和'to' 相同)吗?
  • 另外,你问the same question twice了吗?

标签: php datetime doctrine-orm formbuilder


【解决方案1】:

从您的代码看来,您的getTransaction repo 函数没有接收到它应该接收的$to$from DateTime 对象。像这样更新该函数:

public function getTransaction(DateTime $from, DateTime $to) : Collection
{
    $result = $this->getTransactionRepository()
        ->createQueryBuilder('a')
        ->select('a')
        ->where('a.date >= :from')
        ->andWhere('a.date <= :to')
        ->setParameter('from', $from->format('Y-m-d H:i:s'))
        ->setParameter('to',   $to->format('Y-m-d H:i:s'))
        ->orderBy('p.id')
        ->getQuery()
        ->getArrayResult();

    return $result;
}

你的调用应该包括现在需要的参数,像这样:

$transactions = $this->get('app')->getTransaction($from, $to);

我不太确定 FormBuilder 有什么可用的,所以猜测完整的函数调用是:

$transactions = $this->get('app')->getTransaction(
    $form->get('dateFrom')->getValue(),
    $form->get('dateTo')->getValue(),
);

【讨论】:

    【解决方案2】:

    首先,您应该指定遇到的错误。

    无论如何,我不确定,但我会尝试在您的查询生成器中将所有p.date 替换为Date,因为您使用的是SELECT ASDATE 也是 MySQL 中的保留关键字,您应该将其替换为其他关键字。

    【讨论】:

      猜你喜欢
      • 2012-05-10
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 2012-08-31
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多