我有多对一的关联映射,其中许多考试都有一个科目 如果我必须更新考试ID为xxxx的所有科目的分数属性 我用
Update namespace/Exam e set e.marks = 4 where e.subject.id = xxxx
它不起作用 你能取悦他吗? 帮助我以正确的方式做到这一点?
答案 0 :(得分:1)
如果您的查询没有加入,则无法访问e.subject.id
。但是,在Doctrine更新语句中,连接是不可能的,因为它具有特定的MySQL。
比较整个实体应该做些什么:
$subject = $this->getEntityManager()->getRepository('namespace\subject')
->find(xxx);
$query = $this->getEntityManager()->createQueryBuilder()
->update('namespace\Exam', 'e')
->set('e.marks', '4')
->where('e.subject = :subject')
->setParameter('subject', $subject);
或者,如果您不想要另一个数据库查询并且主题实体的主键只包含一列(例如id
),您还可以与此主键进行比较:
$query = $this->getEntityManager()->createQueryBuilder()
->update('namespace\Exam', 'e')
->set('e.marks', '4')
->where('e.subject = :id')
->setParameter('id', xxx);
另请查看this question,用户也无法加入他的更新声明。
编辑添加了更多通用方法