教条所处的条件多为一

时间:2014-09-06 07:36:24

标签: doctrine dql

我有多对一的关联映射,其中许多考试都有一个科目 如果我必须更新考试ID为xxxx的所有科目的分数属性 我用

Update namespace/Exam e set e.marks = 4 where e.subject.id = xxxx

它不起作用 你能取悦他吗? 帮助我以正确的方式做到这一点?

1 个答案:

答案 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,用户也无法加入他的更新声明。

编辑添加了更多通用方法