我写了以下教义查询:
$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'))
));
不能通过循环开发语句。 但是,由于您只有三个标准,因此很容易写出来。