2015-09-04 41 views
3

我有問題設置基於語句平等學說運營商更新查詢的設置

我想值激活特定uc關閉所有其他ucs

(uc.collection = :collectionId)應該返回true或false,以便正確處理。

的QueryBuilder:

$queryBuilder = $this->getEntityManager()->createQueryBuilder(); 
    $queryBuilder->update('TestBundle:UserCollection', 'uc') 
     ->set('uc.active', '(uc.collection = :collectionId)') 
     ->where('uc.user = :userId'); 

    $queryBuilder->setParameter('collectionId', $collectionId); 
    $queryBuilder->setParameter('userId', $userId); 

輸出DQL:

UPDATE TestBundle:UserCollection uc 
SET uc.active = (uc.collection = :collectionId) WHERE uc.user = :userId 

getSQL錯誤:

[Syntax Error] line 0, col 81: Error: Expected 
Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got '=' 

這裏的SQL我想:

UPDATE user_collections AS uc SET uc.active = (uc.idCollections = 1) 
WHERE uc.idUsers = 74 
+0

呃,爲什麼你會在第一個地方使用括號? –

+0

沒有我得到這個錯誤'[Syntax Error] line 0,col 80:Error:Expected end of string,got'='' –

+0

你有這個理由。我會寫一個答案,爲了可讀性,這可能會幫助你... –

回答

1

嘗試通過expr()->eq(...)表達設置它:

$queryBuilder = $this->getEntityManager()->createQueryBuilder(); 
$queryBuilder->update('TestBundle:UserCollection', 'uc') 
    ->set('uc.active', $queryBuilder->expr()->eq('uc.collection', ':collectionId')) 
    ->where('uc.user = :userId'); 

$queryBuilder->setParameter('collectionId', $collectionId); 
$queryBuilder->setParameter('userId', $userId); 
+0

沒有工作DQL看起來也不正確 '... SET uc.active = collection.id =:collectionId WHERE ...' '[Syntax Error] line 0,col 80:Error:Expected ends of string,有'='' –