0

Doctrine QueryBuilder に次のクエリがあります。

$qb = $this->createQueryBuilder('e')
            ->select('e.id, e.name, e.body, e.teaser, e.slug, e.dateBegin, e.dateEnd, e.dateTbd, v.name AS v_name')
            ->innerJoin('e.venue', 'v')
            ->where('v.name LIKE :TBD')
            ->orWhere('v.name LIKE :TBA')
            ->orWhere('e.name LIKE :TBD')
            ->orWhere('e.name LIKE :TBA')
            ->orWhere('e.name LIKE \'none\'')
            ->orWhere('e.name LIKE \'n/a\'')
            ->orWhere('e.teaser LIKE :TBD')
            ->orWhere('e.body LIKE :TBD')
            ->orWhere('e.dateTbd=true')
            ->orWhere('TIME(e.dateBegin) < :earlyMorning AND TIME(e.dateBegin) > :lateNight')
            ->setParameter('TBA', '%TBA%')
            ->setParameter('TBD', '%TBD%')
            ->setParameter('earlyMorning', '06:00:00')
            ->setParameter('lateNight', '23:00:00');

このクエリの「where」句で結果を区切る方法。where句にリストされている基準ですべてのイベントを表示する必要があります。

4

1 に答える 1

0

これを簡単に達成する方法はわかりません。特に、これを使用して標準の教義エンティティ コレクションを取得すると仮定すると、追加のグループ化/プロパティを実際にこれらに渡すことができないためです。

これらを単にグループ化して、出力時にわずかに異なる表示をする必要がある場合、たとえば、マークアップで、エンティティのクラスに追加のメソッドを追加して、定義された同様の基準に基づいてどの「タイプ」であるかを検出できるようにすることを検討しますたとえば、標準の文字列一致関数を使用します。

それ以外の場合、オプションはコレクションをフィルタリングするか (ArrayCollections はそれを簡単に実行するためのメソッドを実行します)、複数のクエリに分割します。

于 2013-03-03T22:31:01.233 に答える