3

我想过滤结果,如

$searchDate = "2013-03-01";

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

但是,问题是,此列中的值还包含时间,即它们实际上是时间戳(例如“2013-03-01 08:27:12”),我不允许在架构中更改它. 那么我怎么可能匹配忽略时间的纯日期呢?上述查询仅匹配时间为 2013-03-01 00:00:00 的条目。但我想要所有以 2013-03-01 作为日期的条目,无论时间如何。

4

2 回答 2

12

我已经想出了这个解决方案并且它有效:

->filterByPublishedAt(array("min" => $searchDate." 00:00:00", "max" => $searchDate." 23:59:59"))
于 2013-03-12T09:56:55.567 回答
0

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

例如

$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 对象。

于 2014-08-20T10:41:55.827 回答