我正在使用来自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();
谢谢,