我有两个实体关系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());
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)