【发布时间】:2020-12-01 20:47:19
【问题描述】:
我想用一种方法完成一些复杂的事情。
在我的 Symfony 项目中,我正在检查当前日期时间字段是否是过去 X 天。 我在每个表行上将布尔字段持久化为 true。所以 createdDate 不到 X天。
这部分工作正常。
我想要做的是方法是双向的。
我还希望 createdDate 大于 X 天。此外,将布尔字段保留为 false 在它所在的每个表行上。
我的代码:
$date = new \DateTime();
$date->modify('-7 days');
$users = $this->userRepo->createQueryBuilder('u')
->where('u.createdDate < :date')
->setParameter(':date', $date)
->getQuery()
->getResult();
foreach ($users as $user) {
$user->setExceeded(true);
$this->entityManager->persist($user);
$this->entityManager->flush();
}
return $users;
是否有任何可能的方法而不是单独的方法?
喜欢:
if() {
->andWhere('u.createdDate > :date')
$user->setExceeded(false);
}
【问题讨论】:
-
1) 两个
where条件,带有or2) 在循环中再次进行检查并相应更新。 -
感谢重播。嗯,这就是我知道的部分。我想在学说中添加 OR 语句,但我怎样才能适应反向持久化。 $user->setExceeded(false); ? @El_Vanja
-
在循环中执行检查。比较
$date和$user->getCreatedDate()或任何你的getter(只要确保你创建了两个日期实例)。或者,您可以简单地在同一个函数中执行另一个查询和另一个循环,在返回之前合并结果。 -
你介意给我看一个简单的例子吗,因为我现在仍然确定如何做到这一点? @El_Vanja
-
好吧,然后执行
findAll并在循环中过滤掉它们。如果你想更新你的整个实体集,就没有办法绕过一堆工作。
标签: php symfony datetime doctrine symfony4