如何在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的所有参赛作品都可以作为日期,无论时间如何。
答
我已经想通了这个解决方案,它的工作原理:
->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对象。
我想你选择最好的解决方案。 – j0k 2013-03-11 11:50:26
似乎是一个自我回答的问题。感谢您的反馈! – twigmac 2013-03-12 09:36:11
然后您可以从您的问题中删除解决方案,将其作为答案发布并接受它:) – j0k 2013-03-12 09:37:39