我正在使用来自DoctrineExtensions的 Symfony2 + Doctrine + Translatable 。
我有一篇实体文章,其中有几个可翻译的字段,例如标题和内容。现在发生的情况是,我创建了一堆中文文章,但没有添加英文翻译。当我尝试在我的主页上显示前 8 篇最新文章时,这给了我一些问题......当我用英文查看我的主页时,它会在那里显示一堆无标题的文章(没有标题的中文文章英文翻译)。
我通过使用 ORM 查询提示在 Translatable 扩展中找到了解决方案:“\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER”。
这使您可以直接查询实际存储在 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 语句中,这提高了性能,但仍然不够。
有任何想法吗?