具有多个 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 ?
- 使用 "if ( $key2 == 'en-US' ) {" 查询执行并给出预期结果。
- 但是如果我删除 "if ( $key2 == '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'))
));
您不能通过循环来开发语句。但是,因为你只有三个标准,所以很容易写出来。
我写了以下 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 ?
- 使用 "if ( $key2 == 'en-US' ) {" 查询执行并给出预期结果。
- 但是如果我删除 "if ( $key2 == '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'))
));
您不能通过循环来开发语句。但是,因为你只有三个标准,所以很容易写出来。