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

时间:2013-07-13 01:16:03

标签: php symfony orm doctrine entities

我使用来自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循环的每次迭代创建一个新查询。

有没有办法加入翻译表,以便“类别”属性与类别一起获取?

我尝试了这个,但它仍然在每次通话时进行查询:

$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();

谢谢,

1 个答案:

答案 0 :(得分:3)

诀窍是使用可翻译模块给出的映射字段进行连接:

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