我需要像这样进行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 = ?
答案 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的全部内容,即将对象映射到数据库行,而不仅仅是对查询的抽象。
相反,提取对象,然后循环并对单个对象执行操作,然后在循环后刷新。