我遇到了dql查询的问题。
要找到,我的协议与标准有很多关系, 与细节有很多关系的标准, 与organes有很多关系的细节,然后与工作室有多对一关系的organes与国家有多对一的关系。
我需要恢复没有国家/地区或包含在数组中的国家/地区的协议。我的问题是当父项为空而其他不是,实体是验证。我在SQL中没有很多基础,所以我很想念一些东西。
这是我的DQL查询:
$queryBuilder->select('p')
->from($this->getClass(), 'p')
->leftJoin('p.criteres', 'c')
->leftJoin('c.details', 'd')
->leftJoin('d.organes', 'o')
->leftJoin('o.atelier', 'a')
->where('a.country IN (' . $this->getUserCountriesFormated() . ') OR a.country IS NULL')
->orderby('p.name', 'ASC');
提前感谢您的回复。
编辑:由于空的详细信息而引起的协议示例(国家/地区ITA不在我的国家/地区格式化阵列中):
答案 0 :(得分:0)
您的数据模型似乎有点疯狂(NtoN关系太多),请确保它是正确的。我想方法getUserCountriesFormated()
返回逗号分隔的国家/地区ID字符串,例如"1,2,3"
。
然后,而不是
->where('a.country IN (' . $this->getUserCountriesFormated() . ') OR a.country IS NULL')
尝试使用:
->leftJoin('a.country', 'n')
->where('(IDENTITY(n) IN (' . $this->getUserCountriesFormated() . ') OR IDENTITY(n) IS NULL)')