具有多个 OR 条件的 ZF2 Doctrine 查询

ZF2 Doctrine Query With Multiple OR Conditions

我写了以下 Doctrine 查询:

        $query3 = $this->entityManager
            ->createQueryBuilder()
            ->select('t.textDomain , t.translationKey , t.languageIso , t.translationDate')
            ->from(
                'AMDatabase\Entity\TheVerse\TranslationsMasters',
                't'
            )
            ->groupBy('t.languageIso')
            ->orderBy(
                't.translationDate',
                'DESC'
            );

// the values of $key2 array are:
// en-US
// es-MX
// es-PR

        foreach( $translation AS $key2=>$value2 ) {               

            if ( $key2 == 'en-US' ) {

                $query3
                    ->orWhere(
                        $query3->expr()
                               ->like(
                                   't.languageIso',
                                   ':languageIso'
                               )
                    )
                    ->setParameter(
                        'languageIso',
                        $key2
                    );

            }

        }

        $result3 = $query3->getQuery()
                          ->getArrayResult();

如何让查询同时搜索所有 3 种语言的 ISO

我认为通过使用 "orWhere" 它会继续向查询添加条件(其中 en-US 仍会产生匹配项)。

我一直无法让 orWhere 以我认为应该的方式运行。您可能需要先在开始定义中使用 Where,然后才能添加 orWhere。您可能必须像这样使用嵌套的 orX 语句:

$query3->andWhere($query3->expr()->orX(
    $query3->expr()->like('t.languageIso', $query3->expr()->literal('en-US')),
    $query3->expr()->like('t.languageIso', $query3->expr()->literal('es-MX')),
    $query3->expr()->like('t.languageIso', $query3->expr()->literal('es-PR'))
));

您不能通过循环来开发语句。但是,因为你只有三个标准,所以很容易写出来。