我想过滤结果,如
$searchDate = "2013-03-01";
$query->usePublicationQuery()
->filterByPublishedAt($searchDate)
->endUse();
然而,问题是,这列中的值也包含时间,即它们实际上是时间戳(例如:"2013-03-01 08:27:12"),并且不允许在模式中更改它。那么我怎么可能匹配忽略时间的纯日期呢?上面的查询只匹配时间为2013-03-01 00:00:00的条目。但是我想要所有以2013-03-01为日期的条目,而不管时间。
我已经想出了这个解决方案,它是有效的:
->filterByPublishedAt(array("min" => $searchDate." 00:00:00", "max" => $searchDate." 23:59:59"))
对于那些使用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对象。