我必须根据当前日期检索具有原则的数据,我想知道关于它的最佳实践是什么。我应该 :
- 传递一个表示当前时间的 DateTime 对象作为我的函数的参数,这样我就可以轻松测试我的函数
- 在我的 QueryBuilder 的 setParameter() 中实例化一个 DateTime 对象
- 或者只是在我的查询构建器中使用 mysql 的 CURRENT_TIMESTAMP()
我对这些选择有点迷茫,为什么我应该或不选择一个选项。
使用最后一个选项,因为 Doctrine 具有创建查询的功能。因此,要么将 DateTime 对象作为参数传递,例如传递给存储库函数,和/或在使用 QueryBuilder 时使用实例化新的 DateTime 对象。
作为函数的参数,例如在存储库中:
function getStuff(DateTime $from)
{
$criteria = new Criteria();
$criteria->andWhere(
$criteria::expr()->eq('from', $from)
);
return $this->matching($criteria);
}
或者,如果您总是想使用"现在":
function getStuff()
{
$criteria = new Criteria();
$criteria->andWhere(
$criteria::expr()->eq('from', new DateTime('now'))
);
return $this->matching($criteria);
}
为什么作为参数
您可能希望允许用户设置日期(和/或时间),因此允许它从控制器和/或服务传递
为什么是"现在"
您可能希望始终从现在/到现在返回一些东西。
请注意,您可以使用另一种相对格式来设置 DateTime 默认值,而不是'now'
例如:
$dateTime = new DateTime('last day of'); // Sets date to last day of the current month
有关使用原则标准的更多信息
和完整的课程文档