【问题标题】:Symfony 2 DoctrineBehaviors translatable: too many db queriesSymfony 2 DoctrineBehaviors 可翻译:太多的数据库查询
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多