繁体   English   中英

带有日期的 in() 表达式的等价原则

[英]Doctrine equivalent of in() expression with dates

使用 Doctrine 的QueryBuilder ,我尝试in()日期数组上使用in()方法,但我发现它只允许字符串值。

/** @param DateTime[] $dates */
public function findByDate(array $dates): array {
    $qb = $this->createQueryBuilder('Event');
    $qb->andWhere($qb->expr()->in('Event.date', ':dates'));
    $qb->setParameter('dates', $dates);
    return $qb->getQuery()->getResult();
}

使用参数 [{"date":"2020-01-31 00:00:00.000000","timezone_type":3,"timezone":"Europe/Berlin"} 执行“SELECT [...]”时发生异常]:
可捕获的致命错误:无法将 DateTimeImmutable 类的对象转换为字符串

是否有任何简单的in()函数可以处理日期? (最好不要使用 DQL)

这是我想出的解决方案,循环遍历 PHP 数组,构建另一个eq()表达式数组,然后or一切。 它完成了它的工作,但需要在数组中为每个日期声明一个参数,而不是一个单一的数组参数。

如果您找到更好的方法,请告诉我...

/** @param DateTime[] $dates */
public function findByDate(array $dates): array {
    $qb = $this->createQueryBuilder('Event');
    $criteria = [];
    for($i = 0; $i < count($dates); $i++) {
        $criteria[] = $qb->expr()->eq('Event.date', ":date_$i");
        $qb->setParameter("date_$i", $dates[$i]);
    }
    $qb->andWhere($qb->expr()->orX()->addMultiple($criteria));
    return $qb->getQuery()->getResult();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM