带日期的 in() 表达式的学说
Posted
技术标签:
【中文标题】带日期的 in() 表达式的学说【英文标题】:Doctrine equivalent of in() expression with dates 【发布时间】:2020-01-31 21:49:48 【问题描述】:使用 Doctrine 的 QueryBuilder
,我尝试在日期数组上使用 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/ 执行 'SELECT [...]' 时发生异常柏林"]: 可捕获的致命错误:DateTimeImmutable 类的对象无法转换为字符串
是否有任何简单的等价于 in()
函数的日期? (最好不要使用 DQL)
【问题讨论】:
Related. 我建议使用 kejwmen 那里建议的array_map
方法。很简单。
@Jeto 当然...但是我们可以确定Y-m-d H:i:s
格式适用于任何数据库实现/发行版/设置(它是一种 SQL 标准吗?),或者它可能会因数据库服务器?
当然,这种方式可能不太便携。我对 Doctrine 知之甚少,但可能有一种方法可以强制列的日期格式,然后在执行上述操作时可能会检索它。无论如何,您的解决方案对我来说看起来不错(您可能想尝试使其更通用并将其发布在该 github 问题上)。
好主意 :) 添加了对该问题的评论
【参考方案1】:
这是我想出的解决方案,循环遍历 php 数组,构建另一个 eq()
表达式数组,然后 or
ing 一切。
它完成了它的工作,但需要在数组中为每个日期声明一个参数,而不是单个数组参数。
如果你找到更好的方法,请告诉我...
/** @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();
【讨论】:
以上是关于带日期的 in() 表达式的学说的主要内容,如果未能解决你的问题,请参考以下文章
ACCEss表中要设置默认值:DATE()结果是例:2011-8-29,我想要带时间的,例2011-8-29 5:45:12
4.有关日期格式属性改动常识,v$nls_parameters,between and,查询指定部门的员工信息,in和null,like模糊查询,order by后面能够跟:列名表达式别名序号