2013-01-17 80 views
0

以下是我遇到的問題。Symfony2在flush之前/之前將其他行設置爲0

我有一個表,其中包含一個名爲shown_on_homepage的列,只有一行應該設置爲1,其餘應該都設置爲0.我試圖添加一個新行到數據庫,這應該被設置爲1,設定以前有一個1比0

在MySQL我知道這可以通過發出插入前的更新來實現:

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

它確實增加了新行,但有一個shown_on_homepage設置爲1,一個仍然有它。我已經研究過,但是我找不到實現這個目標的方法,我希望你能幫助我。

回答

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

太棒了,它像一個魅力工作!謝謝FWmr。 –