DQL - 过滤实体基于父国

时间:2016-04-12 12:44:02

标签: symfony dql

我遇到了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不在我的国家/地区格式化阵列中):

Position

1 个答案:

答案 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)')