我使用来自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();
谢谢,
答案 0 :(得分:3)
诀窍是使用可翻译模块给出的映射字段进行连接:
->innerJoin('c.translations', 'ct')