检查日期是否在另一个时间段中已经存在

马塞诺

我有一个页面,管理员可以在其中创建新的时间段。现在,当管理员想要添加新的时间段时,我想检查是否还没有其他时间段。

这是我当前的代码,但是我猜想<=并且>=不会像在理论中那样工作吗?

$formMapper->getFormBuilder()->addEventListener(FormEvents::PRE_SUBMIT, function(FormEvent $event) {
  try {
    $from = str_replace('/', '-', $event->getData()['from']);
    $to = str_replace('/', '-', $event->getData()['to']);

    $dateFrom = new \DateTime($from, new \DateTimeZone('Europe/Amsterdam'));
    $dateFrom = $dateFrom->format('Y-d-m');

    $dateTo = new \DateTime($to, new \DateTimeZone('Europe/Amsterdam'));
    $dateTo = $dateTo->format('Y-d-m');

    $query = $this->getModelManager()->createQuery('PeriodeBundle:Periode', 'p');

    $query->select()
      ->where(':from = p.from')
      ->andWhere(':to = p.to')
      ->setParameter('from', $dateFrom)
      ->setParameter('to', $dateTo);

    $data = $query->execute();

    if (count($data) > 0) {
      $event->getForm()->addError(new FormError('This period overwrites another existing period ('
         . $data[0]->getFrom()->format('d/m/Y') . ' to '
         . $data[0]->getTo()->format('d/m/Y') . ')'));
    }
  } catch (\Exception $e) {
      $event->getForm()->addError(new FormError('Date not valid'));
  }


 });

在我的数据库中,有几个简化的周期,如下所示: period_id, from, to

有人可以指出我正确的方向吗?当我创建一个已经存在的期间时,我的数据为NULL,而在不久的将来添加一个期间时,它会为我提供所有行的结果。我读过ltegte但我不太了解如何将其集成到此代码中。

此代码在我的PeriodBundle的管理员中。

xurshid29

我不知道Sonata如何使用表单,但是我认为您应该使用验证约束而不是侦听器。这是一个常见的表单示例:

private $em;

public function __construct(EntityManagerInterface $em)
{
    $this->em = $em;
}

public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver
        ->setDefaults(array(

            ...

            'constraints' => array(
                new Callback(
                    array('callback' => array($this, 'validateForm'))
                )
            )
        ));
}

public function validateForm(MyEntity $myEntity, ExecutionContextInterface $context)
{
    $valid = true;

    $from = str_replace('/', '-', $myEntity->etFrom());
    $to = str_replace('/', '-', $myEntity->getTo());

    $dateFrom = new \DateTime($from, new \DateTimeZone('Europe/Amsterdam'));
    $dateFrom = $dateFrom->format('Y-d-m');

    $dateTo = new \DateTime($to, new \DateTimeZone('Europe/Amsterdam'));
    $dateTo = $dateTo->format('Y-d-m');

    $queryBuilder = $em->createQueryBuilder();

    $query = $queryBuilder
        ->select(array('p'))
        ->from('PeriodeBundle:Periode', 'p')
        ->where($queryBuilder->expr()->gte('p.from', ':from'))
        ->andWhere($queryBuilder->expr()->lte('p.to', ':to'))
        ->setParameters(array(
            'from' => $dateFrom,
            'to' => $dateTo
        ))
        ->getQuery();

    $data = $query->getArrayResult();

    if (count($data) > 0) {
      $valid = false;
    }

    // ....

    if (!$valid) {
        $context
            ->buildViolation('Invalid....')
            ->atPath('MYFIELD')
            ->addViolation()
        ;
    }

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查日期是否在另一个时间段中已经存在

来自分类Dev

检查一个时间段是否包含在另一个时间段中

来自分类Dev

如何在PLSQL中检查时间是否大于或小于另一个时间

来自分类Dev

如何在PLSQL中检查时间是否大于或小于另一个时间

来自分类Dev

检查一个时间范围是否进入另一个时间范围

来自分类Dev

检查对象列表是否在另一个对象列表中已经存在

来自分类Dev

检查对象列表是否在另一个对象列表中已经存在

来自分类Dev

比较时间:检查给定时间是否在另一个时间范围内

来自分类Dev

比较时间:检查给定时间是否在另一个时间范围内

来自分类Dev

Python中是否有一种方法可以计算一个时间占另一个时间的百分比?

来自分类Dev

从两个日期时间之间的时差返回另一个时间

来自分类Dev

提取时间并比较是否大于另一个时间

来自分类Dev

如何通过使用R中的时间序列中的第一个和最后一个时间戳记来定义相遇时间段

来自分类Dev

条件格式(如果一个时间大于另一个时间)

来自分类Dev

如何使用Python在一个时间段内对行进行分组

来自分类Dev

GeoServer:提取一个时间段的栅格数据

来自分类Dev

如何按小时数平均一个时间段?

来自分类Dev

Excel:计算一个时间段内有多少行

来自分类Dev

如何获取不同值的计数直到一个时间段Impala / SQL?

来自分类Dev

从重复的组开始一个时间段

来自分类Dev

在一个时间段内优先考虑上次发生的事件

来自分类Dev

GeoServer:提取一个时间段的栅格数据

来自分类Dev

MySQL选择一个时间段内的最大并发调用数

来自分类Dev

计算一个时间段内每个用户最常触发的事件

来自分类Dev

Sqlite 选择一个时间段内的数据

来自分类Dev

如何在C#中从另一个时间中减去时间?

来自分类Dev

QML动画的另一个时间来源?

来自分类Dev

如何将一个简单的时间字符串解析为一个时间段?

来自分类Dev

如何从python中的时间列中删除一个时间点到另一个时间点的时间戳

Related 相关文章

  1. 1

    检查日期是否在另一个时间段中已经存在

  2. 2

    检查一个时间段是否包含在另一个时间段中

  3. 3

    如何在PLSQL中检查时间是否大于或小于另一个时间

  4. 4

    如何在PLSQL中检查时间是否大于或小于另一个时间

  5. 5

    检查一个时间范围是否进入另一个时间范围

  6. 6

    检查对象列表是否在另一个对象列表中已经存在

  7. 7

    检查对象列表是否在另一个对象列表中已经存在

  8. 8

    比较时间:检查给定时间是否在另一个时间范围内

  9. 9

    比较时间:检查给定时间是否在另一个时间范围内

  10. 10

    Python中是否有一种方法可以计算一个时间占另一个时间的百分比?

  11. 11

    从两个日期时间之间的时差返回另一个时间

  12. 12

    提取时间并比较是否大于另一个时间

  13. 13

    如何通过使用R中的时间序列中的第一个和最后一个时间戳记来定义相遇时间段

  14. 14

    条件格式(如果一个时间大于另一个时间)

  15. 15

    如何使用Python在一个时间段内对行进行分组

  16. 16

    GeoServer:提取一个时间段的栅格数据

  17. 17

    如何按小时数平均一个时间段?

  18. 18

    Excel:计算一个时间段内有多少行

  19. 19

    如何获取不同值的计数直到一个时间段Impala / SQL?

  20. 20

    从重复的组开始一个时间段

  21. 21

    在一个时间段内优先考虑上次发生的事件

  22. 22

    GeoServer:提取一个时间段的栅格数据

  23. 23

    MySQL选择一个时间段内的最大并发调用数

  24. 24

    计算一个时间段内每个用户最常触发的事件

  25. 25

    Sqlite 选择一个时间段内的数据

  26. 26

    如何在C#中从另一个时间中减去时间?

  27. 27

    QML动画的另一个时间来源?

  28. 28

    如何将一个简单的时间字符串解析为一个时间段?

  29. 29

    如何从python中的时间列中删除一个时间点到另一个时间点的时间戳

热门标签

归档