【发布时间】:2013-07-11 15:40:12
【问题描述】:
我正在使用来自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();
谢谢,
【问题讨论】:
标签: php symfony orm doctrine entities