3

結果を次のようにフィルタリングしたい

$searchDate = "2013-03-01";

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

ただし、問題は、この列の値に時間も含まれていることです。つまり、実際にはタイムスタンプ( "2013-03-01 08:27:12"など)であり、スキーマでそれを変更することは許可されていません。 。では、時間を無視して純粋な日付を一致させるにはどうすればよいでしょうか。上記のクエリは、時刻が2013-03-0100: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::LIKE の代わりに Criteria::CUSTOM を使用してください。

例えば

$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 に答える