Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Doctrine 2 delete with query builder

I have two Entities with relation OneToMany, Project and Services. Now i want to remove all the services by project_id.

First attempt:

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

This attempt fails with the Exception Entity Service does not have property project_id. And it's true, that property does not exists, it's only in database table as foreign key.

Second attempt:

$qb = $em->createQueryBuilder(); $qb->delete('Services','s')->innerJoin('s.project','p'); $qb->andWhere($qb->expr()->eq('p.id', ':id')); $qb->setParameter(':id',$project->getId()); 

This one generetate a non valid DQL query too.

Any ideas and examples will be welcome.

like image 448
Constantin Avatar asked Mar 21 '13 18:03

Constantin


1 Answers

You're working with DQL, not SQL, so don't reference the IDs in your condition, reference the object instead.

So your first example would be altered to:

$qb = $em->createQueryBuilder(); $qb->delete('Services', 's'); $qb->where('s.project = :project'); $qb->setParameter('project', $project); 
like image 79
andyhassall Avatar answered Sep 19 '22 19:09

andyhassall