Symfony - 选择date = today的对象

时间:2018-04-12 13:51:16

标签: mysql symfony date select where

我有一个包含代码的实体存储库

/**
 * @ORM\Column(type="date", unique=true, nullable=false)
 * @ORM\Id()
 */
private $disable_date;

实体只包含一个成员(disable_date)

FormEvent

当我尝试检查今天的日期是否在数据库中时,上面的代码返回NULL。 DB中的日期存在。 到底是什么?

2 个答案:

答案 0 :(得分:3)

因为new DateTime()创建类似于此的对象: object(DateTime)#1 (3) { ["date"]=> string(26) "2018-04-12 07:24:34.697668" ["timezone_type"]=> int(3) ["timezone"]=> string(10) "US/Pacific" }

您尝试将确切日期与时间匹配(包括secondsms)。这就是为什么结果是null

检查没有h:i:s的日期

答案 1 :(得分:1)

我使用午夜修改器解决了这个问题。

在原则上声明“日期”字段时,它将在数据库中存储为日期时间,但是实体使用DateTime接口。

因此,如果您尝试将新的\ DateTime(当前日期和时间)与数据库中存储的日期进行比较,并按原则将其解析为存储的日期+当前时间,则比较永远不会相等。

使用午夜修饰符,您实际上是在对等。

$dateInDatabase = '2020-04-22'; 

$parsedByDoctrine = new \DateTime($dateInDatabase); // 2020-04-22 00:00:00 
$now = new \DateTime(); // 2020-04-22 17:20:00 
$todayMidnight = new \DateTime('midnight'); // 2020-04-22 00:00:00 

$now === $parsedInDatabase // FALSE 
$todayMidnight === $parsedInDatabase // TRUE 

这可以在createQueryBuilder或findBy方法中应用

php.net/manual/en/datetime.formats.relative.php