浏览代码

[translatable] applied jsor fix for query walker, in case of component is not mapped

Gediminas Morkevicius 14 年之前
父节点
当前提交
698036a377

+ 3 - 0
lib/Gedmo/Translatable/Query/TreeWalker/TranslationWalker.php

@@ -352,6 +352,9 @@ class TranslationWalker extends SqlWalker
     {
     {
         $em = $this->getEntityManager();
         $em = $this->getEntityManager();
         foreach ($queryComponents as $alias => $comp) {
         foreach ($queryComponents as $alias => $comp) {
+            if (!isset($comp['metadata'])) {
+                continue;
+            }
             $meta = $comp['metadata'];
             $meta = $comp['metadata'];
             $config = $this->listener->getConfiguration($em, $meta->name);
             $config = $this->listener->getConfiguration($em, $meta->name);
             if ($config && isset($config['fields'])) {
             if ($config && isset($config['fields'])) {

+ 18 - 0
tests/Gedmo/Translatable/TranslationQueryWalkerTest.php

@@ -441,6 +441,24 @@ class TranslationQueryWalkerTest extends BaseTestCaseORM
         $this->assertEquals('apie maista', $food->getContent());
         $this->assertEquals('apie maista', $food->getContent());
     }
     }
 
 
+    /**
+     * @group testSelectWithUnmappedField
+     */
+    public function testSelectWithUnmappedField()
+    {
+        $dql = 'SELECT a.title, count(a.id) AS num FROM ' . self::ARTICLE . ' a';
+        $dql .= ' ORDER BY a.title';
+        $q = $this->em->createQuery($dql);
+        $q->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, self::TREE_WALKER_TRANSLATION);
+
+        // array hydration
+        $this->translationListener->setTranslatableLocale('en_us');
+        $result = $q->getArrayResult();
+        $this->assertEquals(1, count($result));
+        $this->assertEquals('Food', $result[0]['title']);
+        $this->assertEquals(1, $result[0]['num']);
+    }
+
     protected function getUsedEntityFixtures()
     protected function getUsedEntityFixtures()
     {
     {
         return array(
         return array(