반응형
교리 2 : 쿼리 작성기로 쿼리 업데이트
안녕하세요 다음 쿼리가 있지만 작동하지 않는 것 같습니다.
$q = $this->em->createQueryBuilder()
->update('models\User', 'u')
->set('u.username', $username)
->set('u.email', $email)
->where('u.id = ?1')
->setParameter(1, $editId)
->getQuery();
$p = $q->execute();
다음과 같은 오류 메시지가 반환됩니다.
치명적인 오류 : '[Semantical Error] line 0, col 38 near'testusername WHERE '메시지가있는'Doctrine \ ORM \ Query \ QueryException '예외 : 오류 :'testusername '이 정의되지 않았습니다.' 에 ...
나는 어떤 도움을 기뻐할 것입니다
나는 당신 이 Expr
함께 사용해야한다고 생각합니다 ->set()
(그러나 이것은 안전하지 않으며 그렇게해서는 안됩니다) :
$qb = $this->em->createQueryBuilder();
$q = $qb->update('models\User', 'u')
->set('u.username', $qb->expr()->literal($username))
->set('u.email', $qb->expr()->literal($email))
->where('u.id = ?1')
->setParameter(1, $editId)
->getQuery();
$p = $q->execute();
대신 모든 값 매개 변수를 만드는 것이 훨씬 안전합니다.
$qb = $this->em->createQueryBuilder();
$q = $qb->update('models\User', 'u')
->set('u.username', '?1')
->set('u.email', '?2')
->where('u.id = ?3')
->setParameter(1, $username)
->setParameter(2, $email)
->setParameter(3, $editId)
->getQuery();
$p = $q->execute();
사용자가 데이터 속성으로 인쇄 된 ID와 함께 나열되는 관리자 대시 보드가있어 어느 시점에서 JavaScript를 통해 검색 할 수 있다고 가정 해 보겠습니다.
이 방법으로 업데이트를 실행할 수 있습니다.
class UserRepository extends \Doctrine\ORM\EntityRepository
{
public function updateUserStatus($userId, $newStatus)
{
return $this->createQueryBuilder('u')
->update()
->set('u.isActive', '?1')
->setParameter(1, $qb->expr()->literal($newStatus))
->where('u.id = ?2')
->setParameter(2, $qb->expr()->literal($userId))
->getQuery()
->getSingleScalarResult()
;
}
AJAX 조치 처리 :
# Post datas may be:
# handled with a specific custom formType — OR — retrieved from request object
$userId = (int)$request->request->get('userId');
$newStatus = (int)$request->request->get('newStatus');
$em = $this->getDoctrine()->getManager();
$r = $em->getRepository('NAMESPACE\User')
->updateUserStatus($userId, $newStatus);
if ( !empty($r) ){
# Row updated
}
Working example using Doctrine 2.5 (on top of Symfony3).
참고URL : https://stackoverflow.com/questions/4337751/doctrine-2-update-query-with-query-builder
반응형
'IT Share you' 카테고리의 다른 글
MATLAB에서 24.0000이 24.0000과 다른 이유는 무엇입니까? (0) | 2020.11.10 |
---|---|
JSP / 서블릿 웹 애플리케이션에서 XSS 방지 (0) | 2020.11.10 |
두 날짜 사이의 날짜 차이를 찾는 방법은 무엇입니까? (0) | 2020.11.10 |
@Test 후 트랜잭션 롤백 (0) | 2020.11.10 |
미래가있는 Scala의 비동기 IO (0) | 2020.11.10 |