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

joh*_*ohn 6 php mysql entity doctrine symfony

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

假设现在我不在乎所有记录是否都是假的,我只希望最多有一条记录为真(尽管强制至少一条记录为真会很好)。

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

关于如何只允许isHome实体中的一条记录设置为 true 有什么想法吗?

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

Nic*_*ich 4

只需为您的实体添加 PrePersist 和 PreUpdate 学说侦听器/订阅者即可。

当监听器被触发时,使用以下命令查询您的存储库中 isHome 设置为 true 的其他实体findBy(array('isHome' => true))

...然后用 isHome false 更新所有找到的实体,并且在您坚持/更新您的实体后,总会只剩下一个在家。