如何在doctrine2

时间:2016-07-06 07:56:03

标签: symfony doctrine-orm

我需要像这样进行SQL查询,

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 = ?

3 个答案:

答案 0 :(得分:0)

替换

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

使用

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

答案 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();

答案 2 :(得分:0)

你应该这样做。

如果你执行UPDATE查询,你就会错过使用Doctrine的全部内容,即将对象映射到数据库行,而不仅仅是对查询的抽象。

相反,提取对象,然后循环并对单个对象执行操作,然后在循环后刷新。