2013-01-17 3 views
0

다음은 내가 문제가되는 사항입니다.Symfony2는 플러시 후/행하기 전에 다른 행을 0으로 설정합니다.

나는 shown_on_homepage이라는 열이 포함 된 테이블을 가지고 있으며, 하나의 행만 1로 설정해야하고 나머지는 모두 0으로 설정해야합니다. 데이터베이스에 새 행을 추가하려고합니다. 이전에 있던 일을 설정, 1로 설정 나는이 삽입 전에 업데이트를 실행하여 달성 할 수있어 MySQL의에서

1 0 :

: 여기

UPDATE table_name SET shown_on_homepage = 0 

내 기업의

class FeaturedPerson { 

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/  
private $id; 

/** 
* @var string 
* 
* @ORM\Column(name="content", type="string", length=2500, nullable=false) 
*/ 
private $content; 

/** 
* @var \DateTime 
* 
* @ORM\Column(name="date_updated", type="datetime") 
*/ 
private $dateUpdated; 


/** 
* @var bool 
* 
* @ORM\Column(name="shown_on_homepage", type="boolean", nullable=false) 
*/ 
private $isShownOnHomepage; 

//... 

public function getIsShownOnHomepage() { 
    return $this->isShownOnHomepage; 
} 

public function setIsShownOnHomepage($isShownOnHomepage) { 
    $this->isShownOnHomepage = $isShownOnHomepage; 
    return $this; 
} 

} 

내가했습니다 컨트롤러에 대한 :

$featured = new FeaturedPerson(); 
$featured->setContent('Test content.'); 
$featured->setDateUpdated('01/02/2013.'); 
$featured->setIsShownOnHomepage(TRUE); 

$em = $this->getDoctrine()->getManager(); 
$em->persist($featured); 
$em->flush(); 

그것은 새 행을 추가 않지만, 1에 shown_on_homepage 세트를 가지고 있던 사람이 아직도있다. 조사를 해봤지만이를 성취 할 수있는 방법을 찾지 못했습니다. 저를 도울 수 있기를 바랍니다.

답변

1

당신은 전에 컨트롤러의 기존 코드에 쿼리를 실행할 수 있습니다 :

$queryBuilder = $this->getDoctrine()->getRepository('YourBundleName:FeaturedPerson')->createQueryBuilder('qb'); 
$result = $queryBuilder->update('YourBundleName:FeaturedPerson', 'd') 
      ->set('d.isShownOnHomepage', $queryBuilder->expr()->literal(0)) 
      ->where('d.isShownOnHomepage = :shown') 
      ->setParameter('shown', 1) 
      ->getQuery() 
      ->execute(); 

변경 'YourBundleName를'번들 이름.

+0

위대한 작품처럼 매력적입니다! 고마워요. –

관련 문제