Symfony 2 DoctrineBehaviors可翻译:数据库查询太多


Symfony 2 DoctrineBehaviors translatable: too many db queries

我的Category实体使用了KnpLabs/DoctrineBehaviors的可翻译特性和"代理翻译",所以我有一个包含属性"name"的CategoryTranslation实体,当我想获得所有类别的列表时,Symfony调试工具栏会告诉我页面已经运行了数千个查询,加载时间超过5秒。

这是我的代码:

$categories = $this->getDoctrine()
    ->getManager()
    ->getRepository('OylexCategoryBundle:Category') 
    ->findAll();
$categoryList = array();
foreach ($categories as $category) {
    $categoryList[] = array(
        'id' => $category->getId(),
        'name' => $category->getName(),
    );
}
//To output as json

您可以看到,'name' => $category->getName(),行为foreach循环的每个迭代生成一个新的查询。

有没有一种方法可以连接转换表,以便在类别旁边获取"name"属性?

我试过了,但它仍然在进行每次呼叫的查询:

$categories = $this->getDoctrine()
    ->getManager()
    ->getRepository('OylexCategoryBundle:Category')
    ->createQueryBuilder('c')
    ->select(array('c'))
    ->leftJoin('OylexCategoryBundle:CategoryTranslation', 'ct', 'WITH', 'c.id = ct.translatable AND ct.locale = ''en''')
    ->getQuery()
    ->getResult();

谢谢,

技巧是使用可翻译模块提供的映射字段进行连接:

->innerJoin('c.translations', 'ct')