具有多个 OR 条件的 ZF2 学说查询



我写了以下教义查询:

        $query3 = $this->entityManager
            ->createQueryBuilder()
            ->select('t.textDomain , t.translationKey , t.languageIso , t.translationDate')
            ->from(
                'AMDatabaseEntityTheVerseTranslationsMasters',
                '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?

  • 使用"if ( $key 2 == 'en-US' ) {",查询执行并给我预期的结果。
  • 但是如果我删除"if ( $key 2 == 'en-US' ) {",则没有搜索结果。

我认为通过使用"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'))
));

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

相关内容

  • 没有找到相关文章

最新更新