Symfony 5,原则查询构建者一方关系

Symfony 5,原则查询构建者一方关系,symfony,doctrine,query-builder,Symfony,Doctrine,Query Builder,我需要Symfony 5的帮助,Doctrine queryBuilder。我需要找到一些项目,其中OneToMany关系仅包含选定文件组中的文件 Entity structure: Documents.php: Id Name: (string) FILES: (OneToMany DocumentsFiles.php) DocumentsFiles.php: Id File: (One

我需要Symfony 5的帮助,Doctrine queryBuilder。我需要找到一些项目,其中OneToMany关系仅包含选定文件组中的文件

Entity structure:
    Documents.php:
       Id
       Name: (string)
       FILES: (OneToMany DocumentsFiles.php)
    DocumentsFiles.php: 
            Id
            File: (OneToOne)
            FileGroup: (ManyToOne DocumentsFilesGroup.php)
            Documents: (ManyToOne Documents.php)
    DocumentsFilesGroup.php:
            Id
            Name: (string)
            ShortName: (string)
            Files: (OneToMany DocumentsFiles.php)

Database:
    Document
        ID, NAME, FILES (OneToMany)
        1, SomeName, [{1, File, 1},{2, File1, 1},{3, File2, 1},{4, File3, 2}],
        2, SomeName1, [{5, File4, 1},{6, File5, 1}]
        3, SomeName2, [{12, File11, 2}]
        4, SomeName3, [{13, File12, 1}]
        5, SomeName4, [{16, File15, 2}]
    DocumentsFileGroups
        Id, Name, ShortName
        1, Temporary, tmp
        2, Final, final
For example:
    I need document with temporary files only.
    Result:  
        2, SomeName1, [{5, File4, 1},{6, File5, 1}]
        4, SomeName3, [{13, File12, 1}]

In DocumentRepository i have query:
$query->addSelect('nodeFiles')->leftJoin('node.files', 'nodeFiles')->leftJoin(\App\Entity\DocumentsFiles::class, 'nodeExt', Expr\Join::WITH, 'nodeExt.fileGroup IN (:documentsFileGroup) AND nodeExt.fileGroup NOT IN (:documentsNotFileGroup)')
                                        ->setParameter('documentsFileGroup', 1)
                                        ->setParameter('documentsNotFileGroup', 2);
But in results i have:
  (wrong) 1, SomeName, [{1, File, 1},{2, File1, 1},{3, File2, 1},{4, File3, 2}],
  2, SomeName1, [{5, File4, 1},{6, File5, 1}]
  4, SomeName3, [{13, File12, 1}]
有人有想法或线索吗?
谢谢您的帮助。

使用
innerJoin
而不是
leftJoin
文档文件最好将过滤条件放入
where()
,因为您不需要两次加入
文档文件。它可能是这样的:

$query->addSelect('nodeFiles')
    ->innerJoin('node.files', 'nodeFiles')
    ->where($query->expr()->eq('nodeFiles.fileGroup', ':documentsFileGroup'))
    ->andWhere($query->expr()->neq('nodeExt.fileGroup', ':documentsNotFileGroup'))
    ->setParameter('documentsFileGroup', 1)
    ->setParameter('documentsNotFileGroup', 2);