Symfony 2 DQL 查询以查找未翻译的记录
Symfony 2 DQL query to find unstranslated records
我必须找到我的实体之一的未压缩记录,我们称之为 Product
。
我已经解决了一个 Product
具有所有可翻译属性和语言环境 (title/text/locale) 的实体。
我还解决了一个 ProductParent
实体,其中包含不需要翻译的所有属性(图像)。
ProductParent
通过 ManyToOne
关系链接到 Product
(Product
是关系的所有者)。
产品看起来像:
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();
}
我必须找到我的实体之一的未压缩记录,我们称之为 Product
。
我已经解决了一个 Product
具有所有可翻译属性和语言环境 (title/text/locale) 的实体。
我还解决了一个 ProductParent
实体,其中包含不需要翻译的所有属性(图像)。
ProductParent
通过 ManyToOne
关系链接到 Product
(Product
是关系的所有者)。
产品看起来像:
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();
}