public function testTranslatableOrderByWithSameCurrentAndDefaultLocale() { $this->_translatableListener->setDefaultLocale($this->_languageEn); $this->_translatableListener->setLocale($this->_languageEn); $qb = new QueryBuilder($this->_em); $qb->select('a'); $qb->from(self::ARTICLE, 'a'); $qb->addTranslatableOrderBy('a', 'title', 'DESC'); $this->assertEquals($this->normalizeDql(sprintf(' SELECT a FROM %s a LEFT JOIN a.translations atranslationsen WITH atranslationsen.locale = :atranslationsenloc ORDER BY atranslationsen.title DESC', self::ARTICLE)), $qb->getDQL()); $this->assertEquals($this->_languageEn, $qb->getParameter('atranslationsenloc')->getValue()); $qb->getQuery()->execute(); }
/** * @param $alias * @param array $criteria * @param array $orderBy * @param $limit * @param $offset * @param mixed $locale * @return QueryBuilder * @throws ConditionException */ private function createFindTranslatableQueryBuilder($alias, array $criteria, array $orderBy = null, $limit = null, $offset = null, $locale = null) { $qb = new QueryBuilder($this->_em); $qb->from($this->_entityName, $alias); $qb->select($alias); foreach ($criteria as $criteriaField => $criteriaValue) { $qb->addTranslatableWhere($alias, $criteriaField, $criteriaValue, $locale); } if (isset($orderBy)) { foreach ($orderBy as $orderField => $orderDirection) { $qb->addTranslatableOrderBy($alias, $orderField, $orderDirection, $locale); } } if (isset($limit)) { $qb->setMaxResults($limit); } if (isset($offset)) { $qb->setFirstResult($offset); return $qb; } return $qb; }