我有一个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)
没有子查询就无法做到这一点?
答案 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)