2013-10-17 56 views
1

我試圖從我的文章對象中選擇我的文章,並加入評論作爲本文的評論數。所以我有這個版本:Symfony2,Doctrine2,具有奇怪結果值的查詢生成器?

$em = $this->getDoctrine()->getManager(); 
$query = $em->createQueryBuilder() 
       ->select('a, COUNT(comments) AS comments_count') 
       ->from('AcmeBlogBundle:Article', 'a') 
       ->leftJoin('a.comments', 'comments') 
       ->groupBy('a.id') 
       ->orderBy('a.id', 'DESC'); 
$articles = $query->getQuery()->getResult(); 

但我會嘗試加載在我的嫩枝模板我的文章列表中,我會得到這個錯誤:

Key "title" for array with keys "0, comments_count" does not exist in AcmeBlogBundle:Admin:index.html.twig at line 13 

index.html.twig

{% for article in articles %} 
    <tr> 
    <td>{{ article.title }}</td> 
    <td><a href="{{ path('default_blog_show', {'slug' : article.slug}) }}">Visit</a> | <a href="{{ path('admin_blog_edit', {'article_id' : article.id}) }}">Edit</a> | <a href="{{ path('admin_blog_delete', {'article_id' : article.id}) }}" onclick="return confirm('Any question...');">Delete</a></td> 
    </tr> 
    {% endfor %} 

但是,查詢是OK的,我檢查了它在我的探查:

SELECT 
    a0_.id AS id0, 
    a0_.title AS title1, 
    a0_.slug AS slug2, 
    a0_.content AS content3, 
    COUNT(c1_.id) AS sclr4 
FROM 
    articles a0_ 
    LEFT JOIN comments c1_ ON a0_.id = c1_.article_id 
GROUP BY 
    a0_.id 
ORDER BY 
    a0_.id DESC 

如果我嘗試使用\Doctrine\Common\Util\Debug::dump($articles);財產傾倒$articles,我會得到這樣的結果:

array(1) { 
    [0]=> 
    array(2) { 
    [0]=> 
    string(30) "Acme\BlogBundle\Entity\Article" 
    ["comments_count"]=> 
    string(1) "0" 
    } 
} 

任何想法,與此查詢結果的問題?

回答

2

它正在發生,因爲教義返回值的數組。

在模板中使用此,它應該看到標題:

<td>{{ attribute(article, 0).title }}</td> 

編輯:

試試這個在您的樹枝模板:

{% for item in articles %} 
    {% set article = item[0] %} 
    {% set comment_count = item['comments_count'] %} 
    <tr> 
    <td>{{ article.title }}</td> 
    <td><a href="{{ path('default_blog_show', {'slug' : article.slug}) }}">Visit</a> | <a href="{{ path('admin_blog_edit', {'article_id' : article.id}) }}">Edit</a> | <a href="{{ path('admin_blog_delete', {'article_id' : article.id}) }}" onclick="return confirm('Any question...');">Delete</a></td> 
    </tr> 
    {% endfor %} 
+0

是它的工作原理,但爲什麼它有這些不是很漂亮的值?有沒有什麼辦法,使這個查詢更好的結果沒有任何「魔法」? (如article.title,article.comments_count) –

+0

在您的編輯中 - 類型爲「Acme \ BlogBu​​ndle \ Entity \ Article」的對象(含ArrayAccess)中的鍵「1」在AcmeBlogBu​​ndle中不存在:Admin:index.html.twig at第13行 –

+0

如果您沒有單獨的文章和評論實體,並且它們之間存在一對多關係,則不需要。然後你可以使用count($ article-> getComments()),因爲getComments()可以返回一系列評論實體。 – Udan