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

问题描述:

我想过滤结果为如何在Propel 1.6中按日期过滤日期时间列?

$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

我想你选择最好的解决方案。 – j0k 2013-03-11 11:50:26

+0

似乎是一个自我回答的问题。感谢您的反馈! – twigmac 2013-03-12 09:36:11

+0

然后您可以从您的问题中删除解决方案,将其作为答案发布并接受它:) – j0k 2013-03-12 09:37:39

我已经想通了这个解决方案,它的工作原理:

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

对于使用条件的情况下,那些不希望/不能切换到编写查询的“新路”:只需使用标准:: 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); 

这样,行走不会试图将其转换为一个DateTime对象。