0

doctrineでcodeigniterを使用しているim、これは私のbdです:

id fecha_publicacion
1  2013-03-23 14:52:06
2  2013-03-23 18:02:06
3  2013-03-23 00:00:00
..   ...

私がやりたいことは、特定の日付から、または特定の範囲の日付の間でそれらの出版物を検索することです

問題は、日付が 2013-03-23 のすべてのフィールドを選択したい場合、クエリは 3 番目のフィールド (時間は 00:00:00) のみを返すことです。

欲しいものを手に入れるにはどうすればいいですか?私は多くのことを試しましたが、成功しませんでした

public function postsByDates($tipo,$fecha1,$fecha2=''){
    if($fecha2 == ''){
        $fecha2 = $fecha1;
    }

    $this->qb = $this->em->createQueryBuilder();
    $this->qb->select('p')
    ->from('models\Post', 'p')
    ->where(
        $this->qb->expr()->eq('p.tipo', '?1'),
        $this->qb->expr()->between('p.fecha_publicacion', '?2', '?3')
            )   
    ->setParameter(1, $tipo)
    ->setParameter(2, "$fecha1%")
    ->setParameter(3, "$fecha2%");

    $query = $this->qb->getQuery();
    $obj = $query->getResult();

    return $obj;
}
4

1 に答える 1

0

問題は、日時/タイムスタンプの比較に日付を指定していることです。したがって、指定された日付 (2013-03-23) がタイムスタンプ (2013-3-23 00:00:00) に変換されると推測しています。

簡単な修正: 「2013-03-23 00:00:00」と「2013-03-23 23:59:59」のような 2 つの日付を指定できます。

適切な解決策: DQL ネイティブ クエリを使用して MySQL のdate()関数を呼び出し、タイムスタンプ フィールド (fecha_publicacion) を日付に変換します。その後、 between 機能を使用できるようになります。

于 2013-09-25T20:26:31.223 に答える