php 是否过滤日期为今天的实体?

eyh26e7m  于 2023-05-16  发布在  PHP
关注(0)|答案(3)|浏览(83)

这就是我所尝试的:

$time = date('Y/m/d');
    $alerts = $repository->findBy(['datum' => $time]);

$time = date('Y/m/d');
    $lessons = $repository->createQueryBuilder('q')
        ->where('q.datum LIKE currentDate')
        ->setParameter('currentDate', $time);

出于某种原因,它们不起作用,我不知道为什么。它应该显示dd($lessons)中的最后一个,但它没有
更新:
这是我得到的rn,但它仍然不工作:

$today = new \DateTime('today');
    $tomorrow = new \DateTime('today +1 day');

    $lessons = $repository->createQueryBuilder('q')
        ->where('q.datum > :today')
        ->andWhere('q.datum < :tomorrow')
        ->setParameter('today', $today)
        ->setParameter('tomorrow', $tomorrow);
xmjla07d

xmjla07d1#

为什么不使用当前数据库日期函数来执行此查询?它看起来像这样:

$lessons = $repository->createQueryBuilder('q')
        ->where('q.datum > now()')
        ->andWhere('q.datum < now()+ INTERVAL 1 DAY');
qij5mzcb

qij5mzcb2#

您使用数据库“Y-m-d”中保存的日期字段格式检查日期格式“Y/m/d”(2023 - 05 - 11)(2023-05- 11)
除此之外,你检查是否可以找到当前日期,但根据你的数据库表没有当前日期。
你做的另一个检查是检查是否有比2023-05-11 00:00:00更高的日期,你应该把它改为更高和相同的'>='

o3imoua4

o3imoua43#

我猜你的实体日期字段是一个日期时间字段(或至少是一个日期字段),如果不是,请确保它是,然后你需要使用DateTime对象进行搜索
您的实体字段应如下所示

/**
 * @ORM\Column(type="date")
 */
private $datum;

# [...]

public function getDatum(): ?\DateTimeInterface
{
    return $this->datum;
}

public function setDatum(\DateTimeInterface $datum): self
{
    $this->datum = $datum;

    return $this;
}

repo函数可以是这样的

// src/Repository/TableRepository.php
public function findByStartAndEndDate($dateStart, $dateEnd)
{
    $qb = $this->createQueryBuilder('q');

    return $qb
        ->andWhere(
            $qb->expr()->between('q.datum', ':dateStart', ':dateEnd')
        )
        ->setParameter('dateStart', $dateStart)
        ->setParameter('dateEnd', $dateEnd)
        ->getQuery()
        ->getResult()
    ;
}

在你的控制器里使用那个函数

// src/Controller/TableController.php
$dateStart = new DateTime();
$dateEnd = new DateTime('+1 days');

$items = $repository->findByStartAndEndDate($dateStart, $dateEnd);

GL HF

相关问题