Symfony 2.7 EntityType -> StartDateTime 和 EndDateTime 之间的 QueryBuilder 或 null

Symfony 2.7 EntityType -> QueryBuilder between StartDateTime and EndDateTime or null

我怎样才能 select 只有可用的商店? 我的实体有一个 startDateTime 和一个 endDateTime。两个字段都有 nullable=true.

如果 startDateTime 为 null 则不得考虑。 endDateTime 也是如此。

它尝试这个,但它 select 仅具有此开始和结束日期的商店:

$builder->add(
    'firstStoreChoice',
        EntityType::class,
        [
            'class'        => 'MyBundle\Entity\Store',
            'property'     => 'name',
            'choice_value' => 'id',
            'attr'         => ['data-init' => 'select2', 'data-select2-width' => '100%'],
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('s')
                        ->where('s.startDateTime is null')
                        ->orWhere('s.startDateTime > :now')
                        ->andWhere('s.endDateTime is null')
                        ->orWhere('s.endDateTime < :now')
                        ->setParameters(['now' => new \DateTime()]);
                },
            ]
        );

商店 1: 开始时间:2017-05-19 09:17:02 结束:2017-05-1909:17:02

商店 2: 开始时间:2017-02-01 13:53:00 结束: 2017-02-02 13:53:00

这些商店不可用,因为结束日期已过。 今天是2017-05-3009:39:00.

有人可以把我推向正确的方向吗?

你必须嵌套你的条件:

$qb = $er->createQueryBuilder('s');

return $qb
    ->where(
        $qb->expr()->orX(
            $qb->expr()->lt('s.StartDateTime', 'CURRENT_TIMESTAMP()'),
            $qb->expr()->isNull('s.StartDateTime')
        )
    )
    ->andWhere(
        $qb->expr()->orX(
            $qb->expr()->gt('s.EndDateTime', 'CURRENT_TIMESTAMP()'),
            $qb->expr()->isNull('s.EndDateTime')
        )
    );