使用查询构建器删除Doctrine 2

Con*_*tin 27 php doctrine-orm

我有两个实体关系OneToMany,ProjectServices.现在我想通过project_id删除所有服务.

第一次尝试:

$qb = $em->createQueryBuilder();
$qb->delete('Services','s');
$qb->andWhere($qb->expr()->eq('s.project_id', ':id'));
$qb->setParameter(':id',$project->getId());
Run Code Online (Sandbox Code Playgroud)

此尝试因异常而失败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());
Run Code Online (Sandbox Code Playgroud)

这一个也是一个无效的DQL查询.

任何想法和例子都将受到欢迎.

小智 58

您正在使用DQL而不是SQL,因此不要在您的条件中引用ID,而是引用该对象.

所以你的第一个例子将改为:

$qb = $em->createQueryBuilder();
$qb->delete('Services', 's');
$qb->where('s.project = :project');
$qb->setParameter('project', $project);
Run Code Online (Sandbox Code Playgroud)

  • 要执行查询,添加: ->getQuery()->execute(); (9认同)