选择没有子项的实体

时间:2014-08-08 09:15:27

标签: symfony doctrine-orm entity entity-relationship

我有一个DB表,包含Quotations和Invoices实体。我将它们保存在同一个表中,因为在项目中,报价和发票是相同类型的数据,报价就在发票之前。我们可以从报价单生成发票,发票将收到与其母报价相同的数据。所以我有一个字段parent_id,自我引用他的父母。我可以判断表格行是发票还是来自"类型"领域。 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)

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

1 个答案:

答案 0 :(得分:2)

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

$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)