Symfony 2.3实体布尔属性只允许一行为真

时间:2013-07-11 23:46:31

标签: php mysql symfony doctrine entity

这应该很简单,但我似乎无法找到答案...... 我要做的是创建一个页面包;这些部分非常简单。我在我的数据库中添加了isHome列。基本上我想要在主页的页面上设置一个标志。显然,数据库中只有一行可以将该值设置为true,其余行必须为false。

我们暂时说我不关心所有记录是否都是假的,我只想要一条记录是真的(尽管强迫至少一条记录是真的很好)。

我最初考虑这样做的方法是在存储库中创建一个方法,以便在当前isHome对象将page值设置为true时将所有isHome值设置为false,然后保存该记录。看起来像个好主意,但似乎我不能/不应该从实体调用存储库。

关于我如何只允许一条记录从实体设置为isHome的任何想法?

我正在使用Symfony 2.3.1和MySQL数据库以及doctrine2。

1 个答案:

答案 0 :(得分:3)

只需为您的实体添加PrePersist和PreUpdate原则listener/subscriber即可。

当触发器被触发时,使用诸如findBy(array('isHome' => true))之类的内容查询存储库以查找isHome设置为true的其他实体...

...然后使用isHome false更新所有找到的实体,并且在您持久保存/更新实体后,将始终只剩下一个实体。