Symfony 选择没有子项的实体

Symfony 选择没有子项的实体,symfony,doctrine-orm,entity,entity-relationship,Symfony,Doctrine Orm,Entity,Entity Relationship,我有一个包含报价和发票实体的DB表。我将它们保存在同一个表中,因为在项目中,报价和发票是同一种数据,报价在发票之前。我们可以从报价单生成发票,发票将收到与其父报价单相同的数据。所以我有一个字段parent\u id,自引用他的父项。我可以从type字段判断表行是发票还是报价单。1=发票,2=报价单 现在我想提取有chilg发票的报价,以及没有子发票的报价。 为了有一个孩子,我做了以下几件事,而且效果很好: $query = $this->createQueryBuilder('i')

我有一个包含报价和发票实体的DB表。我将它们保存在同一个表中,因为在项目中,报价和发票是同一种数据,报价在发票之前。我们可以从报价单生成发票,发票将收到与其父报价单相同的数据。所以我有一个字段parent\u id,自引用他的父项。我可以从type字段判断表行是发票还是报价单。1=发票,2=报价单

现在我想提取有chilg发票的报价,以及没有子发票的报价。 为了有一个孩子,我做了以下几件事,而且效果很好:

$query = $this->createQueryBuilder('i')
        ->select('COUNT(q.id) AS number')
        ->join('i.parent', 'q')
        ->where('q.user = :user')
        ->setParameter('user', $user)
        ->andWhere('q.statut > :statut_draft')
        ->setParameter('statut_draft', 0)
        ->andWhere('q.type = :type')
        ->setParameter('type', 2)
        ;
但我不知道如何选择没有孩子的引语。有点

SELECT COUNT(q.id) FROM Table WHERE q.id NOT IN (SELECT i.parent_id FROM Table WHERE type = 1)
?


没有子查询就无法做到这一点?

原则允许您使用子查询。试试这个

$query = $this->createQueryBuilder('i')
        ->select('COUNT(q.id) AS number')
        ->where('q.user = :user')
        ->andWhere('NOT EXISTS (SELECT 1 FROM MyEntity q2 
            WHERE q2.type = 1 AND q2.parent = q)')
        ->setParameter('user', $user)

我刚回到这个功能,我尝试了你的解决方案。它返回了一个无效的PathExpression。必须是SingleValuedAssociationField错误,因此我尝试摆脱这些标识筛选器,它可以工作:->和WHERE'notexists从EvoBackendBundle:Invoice I中选择1,其中I.type=1和I.parent=q'。非常感谢。