1

我正在使用来自KnpLabs/DoctrineBehaviors的 Translatable 特征和我的 Category 实体的“代理翻译”,所以我有一个包含属性“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();

谢谢,

4

1 回答 1

4

诀窍是使用可翻译模块给出的映射字段加入:

->innerJoin('c.translations', 'ct')
于 2013-08-28T15:11:21.433 回答