2016-07-06 11 views
0

我需要一個SQL查詢這個樣子,如何使這個在doctrine2

UPDATE org_mapping SET is_active = 1 WHERE (org_id = ? AND service_provider_id = ?)OR (org_id = ? AND service_provider_id = ?) 

我試過,但它現在的工作:

$q = $qb->update('Organization\Entity\OrgMapping', 'om') 
     ->set('om.active', $qb->expr()->literal($isActive)) 
     ->where('om.organization = ?1')->andWhere('om.serviceProvider = ?2') 
     ->orWhere('om.organization = ?2')->andWhere('om.serviceProvider = ?1') 
     ->setParameter(1, $organizationId) 
     ->setParameter(2, $hspId) 
     ->getQuery(); 

當我跑步,我得到的下面的查詢:

UPDATE org_mapping SET is_active = 1 WHERE ((org_id = ? AND service_provider_id = ?) OR org_id = ?) AND service_provider_id = ? 

回答

0

更換

->orWhere('om.organization = ?2')->andWhere('om.serviceProvider = ?1') 

隨着

->orWhere('om.organization = ?2 AND om.serviceProvider = ?1') 
0

試試這個:

$q = $qb->update('Organization\Entity\OrgMapping', 'om') 
     ->set('om.active', $qb->expr()->literal($isActive))  
     ->where(
      $qb->expr()->orX( 
       $qb->expr()->andX(
        $qb->expr()->eq('om.organization', '?1') 
        , 
        $qb->expr()->eq('om.serviceProvider','?2') 
       ), 
       $qb->expr()->andX(
        $qb->expr()->eq('om.organization', '?2') 
        , 
        $qb->expr()->eq('om.serviceProvider','?1') 
       ) 
      ) 
     ) 
     ->setParameter(1, $organizationId) 
     ->setParameter(2, $hspId) 
     ->getQuery(); 
0

你應該做到這一點。

如果您執行UPDATE查詢,您會錯過使用Doctrine的全部要點,即將對象映射到數據庫行,而不僅僅是查詢的抽象。

取而代之,提取您的對象,然後執行一個循環並對單個對象執行操作,然後在循環之後進行刷新。

+0

某些情況下可以證明是正確的。沒關係,只要開發人員知道他做了什麼。 – Alsatian

相關問題