我必须找到我的某个实体的无统计记录,让我们称之为Product
。
我已经使用所有可翻译属性和区域设置(标题/文本/区域设置)确定了一个Product
实体。
我还确定了一个ProductParent
实体,其中包含所有不需要翻译的属性(图片)。
ProductParent
通过Product
关系与ManyToOne
相关联(Product
是该关系的所有者。)
产品看起来像:
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
有人可以帮忙吗?
答案 0 :(得分:1)
这可能会对你有帮助。
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();
}
答案 1 :(得分:1)
理论上你可以这样做:
... WHERE b.locale = 'en' AND b.id NOT IN (SELECT id FROM `blah-blah` WHERE locale = "es")
答案 2 :(得分:0)
使用此查询适用于我:
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();
}