4

Doctrine クエリを作成したい: (Doctrine 2.3)

SELECT * FROM `car` WHERE `plate` like '%' AND (`datetime` BETWEEN '2013-03-13 22:20:18' AND '2013-03-13 22:20:20') OR (`datetime` BETWEEN '2013-03-13 15:10:18' AND '2013-03-13 15:10:16')

私は次のことを試しましたが、うまくいきません:

$qry = $this->manager()->createQueryBuilder()
                    ->from($this->entity, 'e')
                    ->select('e');
$qry->where('e.plate like :plate');
$qry->setParameter('plate', $plate);
$qry->andWhere(
        qry->expr()->between(
             'e.datetime',
            ':dateFrom',
            ':dateTo'
         )
        )
    ->setParameter('dateFrom', $fromdate)
    ->setParameter('dateTo', $todate);
    $qry->orWhere(
            $qry->expr()->between(
                'e.datetime',
                ':dateFrom',
                ':dateTo'
             )
            )
    ->setParameter('dateFrom1', $fromdate1)
    ->setParameter('dateTo1', $todate1);

上記のクエリの出力:

SELECT e FROM user e WHERE (e.plate like :plate AND (e.datetime BETWEEN :dateFrom AND :dateTo)) OR (e.datetime BETWEEN :dateFrom AND :dateTo)

同じ列の 2 つの日付を確認したいのですが、どうすれば確認できますか? 構文は正しいですか?現在、次のようになっています。

(Plate AND (Date)) OR Date)

ケース1

ただし、適切な出力を得るには、次のようにする必要があります。

(Plate) AND ((Date) OR (Date))

ケース 2

それ以外の場合は、次のようになります。

((Plate) or (Plate)) AND ((Date) OR (Date))

私は Doctrine の専門家ではありません。私は学習者です。

4

1 に答える 1