2013-05-31 66 views
0

我使用Symfony2 +原則+可翻譯從DoctrineExtensionsDoctrine可翻譯如何只讀取記錄與翻譯

我有一個實體文章,有幾個可翻譯的字段,如標題和內容。現在發生的事情是,我用中文創作了一堆文章,但沒有添加英文翻譯。當我嘗試在我的主頁上顯示前8條最新文章時,這給了我一些問題......當我用英文查看我的主頁時,它會在那裏顯示一堆無標題文章(中文文章沒有英文翻譯)。

我通過使用ORM查詢提示: 「\ Doctrine \ ORM \ Query :: HINT_CUSTOM_OUTPUT_WALKER」在Translatable擴展中找到了此解決方案。

這可讓您直接查詢實體的實際存儲在ext_translations中而不是實體表中的翻譯字段。

因此,我用它來獲取對網頁中的文章代碼如下所示:

public function getNewestArticles($limit = 1){ 
    $dql = 
    "SELECT a FROM NewsBundle:Article a 
    WHERE a.published = 1 
    AND a.title != '' 
    ORDER BY a.created_at DESC"; 
    $query = $this->_em->createQuery($dql); 
    $query->setMaxResults($limit); 
    $query->setHint(
     \Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 
     'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker' 
    ); 

    $result = $query->getResult(); 

    return $result; 
} 

這實際工作,但生成的查詢是效率低下,它會減慢頁面很多..我在說1800毫秒的查詢。我也試圖把我需要的字段放在select語句中,這會提高性能,但還不夠。

任何想法?

回答

0

您可以嘗試手動優化查詢。在控制器中使用的語言環境作爲參數在你的倉庫

public function getNewestArticles($locale, $limit = 1){ 
    //your own superfast query 
} 

然後設置與

$locale = $request->getLocale(); 
$em->getNewestArticles($locale, $limit); 

附加問題的語言環境:有你在你的表設置索引?