2014-09-06 67 views
0

我有一個多對一關聯映射,許多考試有一個科 如果我要更新標記 我用主義那裏條件多對一

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

它與考試編號XXXX所有學科的性質沒有工作 你能請他 幫助我以正確的方式做到這一點?

+0

什麼你想知道嗎?你的問題是什麼?? – 2014-09-06 07:56:57

+0

嗨,我更新了關於你的第二個問題的答案。這是你的意思嗎?如果它對你有幫助,你可以接受答案是正確的;-) – SBH 2014-09-09 17:37:48

回答

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,用戶無法在他的更新語句加入了。

編輯:增加了更多的一般的方法

+0

如果財產不是身份,那我們該怎麼辦? – Sagar 2014-09-07 04:20:28

+0

你的意思是如果主鍵由多個列組成?在這種情況下,您可以與完整的主題對象進行比較。 – SBH 2014-09-07 18:12:16