Сравнение результатов дат с Доктриной - PullRequest
0 голосов
/ 21 января 2019

Я написал вызов 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>`

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Судя по вашему коду, ваша функция репо getTransaction не получает объекты $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(),
);
0 голосов
/ 21 января 2019

Прежде всего, вы должны указать, какую ошибку вы получите.

В любом случае, я не уверен, но я бы попытался заменить все p.date на Date в вашем построителе запросов, поскольку вы используете SELECT AS. Также DATE является зарезервированным ключевым словом в MySQL, и вы должны заменить его на что-то другое.

...