如何在Propel 1.6中按日期过滤日期时间列?

时间:2013-03-11 11:23:45

标签: php mysql date datetime propel

我想按照

过滤结果
$searchDate = "2013-03-01";

$query->usePublicationQuery()
            ->filterByPublishedAt($searchDate)
            ->endUse();

然而,问题是,此列中的值还包含时间,即它们实际上是时间戳(例如“2013-03-01 08:27:12”)并且我不允许更改在架构中。那么如何才能与无视时间的纯粹日期相匹配呢?以上查询仅匹配时间为2013-03-01 00:00:00的条目。但我希望2013-03-01的所有参赛作品都是日期,无论时间如何。

2 个答案:

答案 0 :(得分:10)

我已经找到了这个解决方案并且有效:

->filterByPublishedAt(array("min" => $searchDate." 00:00:00", "max" => $searchDate." 23:59:59"))

答案 1 :(得分:0)

对于那些使用Criteria实例并且不想/不能切换到编写查询的“新方法”的人:只需使用Criteria :: CUSTOM而不是Criteria :: LIKE。

E.g。

$c = new Criteria();
$c->add(SomePeer::CREATED_AT, $date.'%', Criteria::LIKE);

变为

$c = new Criteria();
$c->add(SomePeer::CREATED_AT, SomePeer::CREATED_AT.' LIKE "'.$date.'%"',Criteria::CUSTOM);

这样,Propel不会尝试将其转换为DateTime对象。