php - Doctrine 2 使用查询生成器删除

标签 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());

此尝试失败并出现异常 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/

相关文章:

php - 如何使用群()

php - 如何通过 JAXL 发送 Facebook 聊天消息?

php - 插入 DB 后小数点四舍五入

doctrine-orm - 从未导入自定义注释

php - "Not null violation: 7"在 Doctrine2 上使用 manyToOne 和 oneToMany 关系时

Symfony2 (doctrine) 原生 sql 插入

doctrine-orm - Zend Framework 2 + Doctrine2 - 未检测到实体

php - 如何模拟非确定性方法?

php - php 和 mysql 中的 while 和 if 语句

php - Symfony2 - 学说 : setMaxResults() doesn't work