我有两个具有 OneToMany 关系的实体,Project
和 Services
。现在我想通过 project_id 删除所有服务。
第一次尝试:
$qb = $em->createQueryBuilder();
$qb->delete('Services','s');
$qb->andWhere($qb->expr()->eq('s.project_id', ':id'));
$qb->setParameter(':id',$project->getId());
此尝试失败并出现异常 Entity Service does not have property project_id
。确实,该属性不存在,它仅作为外键存在于数据库表中。
第二次尝试:
$qb = $em->createQueryBuilder();
$qb->delete('Services','s')->innerJoin('s.project','p');
$qb->andWhere($qb->expr()->eq('p.id', ':id'));
$qb->setParameter(':id',$project->getId());
这个也生成一个无效的 DQL 查询。
欢迎提出任何想法和示例。
最佳答案
您使用的是 DQL,而不是 SQL,因此不要在您的条件中引用 ID,而是引用对象。
因此您的第一个示例将更改为:
$qb = $em->createQueryBuilder();
$qb->delete('Services', 's');
$qb->where('s.project = :project');
$qb->setParameter('project', $project);
关于php - Doctrine 2 使用查询生成器删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15555042/