【问题标题】:Persisting doctrine results with different values坚持不同价值观的教义结果
【发布时间】: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 条件,带有or 2) 在循环中再次进行检查并相应更新。
  • 感谢重播。嗯,这就是我知道的部分。我想在学说中添加 OR 语句,但我怎样才能适应反向持久化。 $user->setExceeded(false); ? @El_Vanja
  • 在循环中执行检查。比较$date$user-&gt;getCreatedDate() 或任何你的getter(只要确保你创建了两个日期实例)。或者,您可以简单地在同一个函数中执行另一个查询和另一个循环,在返回之前合并结果。
  • 你介意给我看一个简单的例子吗,因为我现在仍然确定如何做到这一点? @El_Vanja
  • 好吧,然后执行findAll 并在循环中过滤掉它们。如果你想更新你的整个实体集,就没有办法绕过一堆工作。

标签: php symfony datetime doctrine symfony4


【解决方案1】:
$date = new \DateTime();
$date->modify('-7 days');
$users = $this->userRepo->findAll();

foreach ($users as $user) {
    $user->setExceeded($user->getCreatedDate() < $date);
}
$this->entityManager->flush();

return $users;

【讨论】:

    猜你喜欢
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多