我有一个代表广告的广告实体。此广告实体与adRemark的关系过多。这样做的原因是adRemark由于支持多种语言而包含多个记录。
一种广告只能在一种语言中使用一个adRemark,但会误记未填写的语言的记录,或者甚至由于没有语言数据而可能没有adRemark记录。
我正在建立一个查询,以检索包括adRemark在内的所有广告。
$query = $this->createQueryBuilder('ad')
->select('ad.id, ad.title, ad.year, ad.hours, ad.status')
->addSelect('rem.remark')
->leftJoin('ad.remark', 'rem')
->andWhere("rem.language = 'NL' or rem.language is null")
->getQuery()
->getResult();
通过此查询,我将获得所有带有例如荷兰语(NL)备注或没有adRemark记录的广告。但是我想念没有NL adRemaks记录但有EN或DE记录的广告。
我为此工作了几个小时,但无法定义一个好的查询。非常感谢您的帮助。
Herby sql dump:
“选择ad.id,ad.title,ad.year,ad.hours,ad.status,rem.remark FROM Mtr \ Bundle \ Entity \ Ad LEFT JOIN ad.remark rem WHERE(rem.language ='NL'或rem.language为空)“
答案 0 :(得分:0)
您不想过滤所有结果集,而仅对联接进行过滤,因此将条件移至 join子句。
将查询更改为:
use Doctrine\ORM\Query\Expr\Join;
$query = $this->createQueryBuilder('ad')
->select('ad.id, ad.title, ad.year, ad.hours, ad.status')
->addSelect('rem.remark')
->leftJoin('ad.remark', 'rem', Join::WITH, "rem.language = 'NL' OR rem.language is null")
->getQuery()
->getResult();
参考