Symfony 2 DQL 查询以查找未翻译的记录

Symfony 2 DQL query to find unstranslated records

我必须找到我的实体之一的未压缩记录,我们称之为 Product

我已经解决了一个 Product 具有所有可翻译属性和语言环境 (title/text/locale) 的实体。 我还解决了一个 ProductParent 实体,其中包含不需要翻译的所有属性(图像)。 ProductParent 通过 ManyToOne 关系链接到 ProductProduct 是关系的所有者)。

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

ProductParent 看起来像: id | image

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

的记录

我已经启动了 DQL 查询,但它根本不起作用,而且它真的不是我的 "cup of tea"。

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

有人能帮忙吗?

这可能对你有帮助。

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();

}

理论上你可以这样做:

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

使用这个查询对我有用:

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();
}