2016-07-06 2 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