【问题标题】:Symfony 2 DQL query to find unstranslated recordsSymfony 2 DQL 查询以查找未翻译的记录
【发布时间】:2015-11-26 14:01:30
【问题描述】:

我必须找到我的一个实体的不受限制的记录,我们称之为Product

我已经确定了一个具有所有可翻译属性和语言环境(标题/文本/语言环境)的Product 实体。 我还设置了一个 ProductParent 实体,其中包含不需要翻译的所有属性(图像)。 ProductParent 通过ManyToOne 关系链接到ProductProduct 是关系的所有者)。

产品看起来像: id | title | text | parent_id | locale

ProductParent 看起来像: id | image

我现在需要的是能够获取Product 中的哪些记录没有被翻译成给定的语言环境('es'),'en' 是'默认'语言环境。 所以我需要找到所有只有 locale = en 的记录。

我已经启动了一个 DQL 查询,但它根本不起作用,这真的不是我的“一杯茶”。

SELECT a 
FROM ProductParent a
LEFT JOIN Product b
ON a.id = b.parent_id
WHERE b.locale
IN ("en", "es")
GROUP BY a.id
HAVING COUNT * < 2

谁能帮忙?

【问题讨论】:

    标签: mysql symfony translation dql


    【解决方案1】:

    理论上你可以这样做:

    ... WHERE b.locale = 'en' AND b.id NOT IN (SELECT id FROM `blah-blah` WHERE locale = "es")
    

    【讨论】:

    • 这是有效的,但就性能而言,我不确定这是最好的。不过谢谢!
    • 是的,如果我们谈论性能的话,它并不是那么好,但如果我记得 - 使用 HAVING,正如我所见,它甚至是 HAVING 和 COUNT, - 更昂贵。
    【解决方案2】:

    这可能会对你有所帮助。

    public function findUnstranslated($default) {
    
        $query = $em->createQueryBuilder('p')
            ->leftJoin('p.parent_id', 'parent')
            ->where('p.locale = :locale')
            ->setParameter('locale', $default)
            ->groupBy('parent.id')
            ->having('COUNT(parent.id) < 2')
            ->getQuery();
    
        return $query->getResult();
    
    }
    

    【讨论】:

    • 谢谢,很有帮助,请看下面我的回答。
    • 刚刚编辑。告诉我你是否有预期的结果。
    • 不,它只是返回我所有的“默认语言环境”记录。
    • 你说“但我只需要 'en' ($defaul there) 中的记录”。
    • 是的哈哈,但首先是要获取默认语言环境的非分层记录。 :) 使用您的解决方案,我得到了所有默认记录(已翻译和未翻译)。
    【解决方案3】:

    使用此查询对我有用:

    public function findUnstranslated($default, $locale)
    {
        return $this->createQueryBuilder('p')
            ->leftJoin('p.parent', 'parent')
            ->where('p.locale IN (:locale)')
            ->setParameter('locale', [$default, $locale])
            ->groupBy('parent.id')
            ->having('COUNT(parent.id) < 2')
            ->getQuery()
            ->getResult();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      相关资源
      最近更新 更多