【问题标题】:Symfony2 setting other rows to 0 after/before flushSymfony2 在刷新之后/之前将其他行设置为 0
【发布时间】:2013-01-01 12:39:07
【问题描述】:

这就是我遇到的问题。

我有一个表,其中包含一个名为 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 的行仍然有它。我已经研究过,但我找不到实现此目的的方法,希望您能帮助我。

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案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”更改为您的捆绑包名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 2019-04-17
      • 1970-01-01
      相关资源
      最近更新 更多