Я написал следующее Doctrine запрос:ZF2 Doctrine Query С Multiple ИЛИ Условия
$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 языка ИС в то же время?
- С "if ($ key2 == 'en-US') {" запрос выполняется и дает мне ожидаемый результат.
- Но если я удалю "if ($ key2 == 'en-US') {" нет результатов поиска.
Я думал, что с помощью «orWhere» он будет добавлять условия к запросу (где en-US все равно будет производить соответствие).
Вы пытались вызвать 'getSQL()' вместо 'getQuery()', чтобы увидеть сгенерированный SQL-запрос? orWhere кажется капризным: http://stackoverflow.com/questions/6878448/doctrine-or-where – Ulti
Я обнаружил свою проблему. Я использовал: languageIso. Исключительно связанный язык ISO был найден во всех случаях. Простое изменение разрешило это: –
$ i = 1; Еогеасп ($ перевод AS $ key2 => $ значение2) { $ query3 -> orWhere ( $ query3-> выражение() -> как ( 't.languageIso', . ': LanguageIso' $ i ) ) -> setParameter ( 'languageIso'. $ i, $ key2 ); ++ $ i; } –