将标志存储在 SQL 数据库中并在 Symfony 中使用它们
我在数据库中有一组对象,它们可以有许多与之关联的布尔标志。
这些标志将被预先定义,但以后可能会添加或删除标志。我可以将它们存储在带有 FlagID
和 FlagName
的表中。
存储这些标志的值很容易 - 它们可以保存在一个包含 ObjectID
和 FlagID
的简单表中 - 该表中的条目将指示“设置”标志。
如果我随后使用联接进行查询,则可以轻松提取带有“set”标志的对象
。
但是我的 Symfony 应用程序(使用 Doctrine 作为 ORM)需要获取此连接中的所有“未设置”值,以便它可以提供用于设置它们的复选框 - 即理想的输出将是
ObjectID FlagID Value
1 1 True
1 2 False
2 1 False
2 2 False
3 1 False
3 2 True
这个结果集将由以下数据产生 这样,我不需要针对每个对象存储所有未设置的标志
ObjectID FlagID
1 1
3 2
FlagID FlagName
1 Foo
2 Bar
,因此我不需要担心在添加标志时用未设置的标志预先填充表。
是否有一个查询会生成这个结果集?
I have a set of objects in a DB which can have a number of boolean flags associated with them.
The flags will be pre-defined but may flags may be added or removed later. I could store them in a table with FlagID
and FlagName
.
Storing the values of these flags is easy - they could be saved in a simple table containing the ObjectID
and the FlagID
- an entry in this table would indicate a 'set' flag.
If I then did a query with a join, it would be easy to extract the Objects
with their 'set' flags.
But my Symfony application (using Doctrine as the ORM) needs to get all of the 'unset' values in this join so it can offer checkboxes for setting them - i.e the ideal output would be
ObjectID FlagID Value
1 1 True
1 2 False
2 1 False
2 2 False
3 1 False
3 2 True
This result set would result from the following data in the database
ObjectID FlagID
1 1
3 2
FlagID FlagName
1 Foo
2 Bar
This way, I don't need to store all the unset flags against each Object, and thus I don't need to worry about pre-populating the table with unset flags whenever a flag is added.
Is there a query that will generate this resultset?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你需要这样的东西:
You need something like so:
另一种解决方案是使用 8 字节整数,它最多可以提供 64 个标志,您可以一次获取这些标志。它将消除获取多个记录并读取每个字段的麻烦。
参考
提取位标志的最有效方法
PHP 中位标志的最佳实践
another solution would be to use a 8byte integer which would give you upto 64 flags, that you could fetch at once. it will eliminate the hassle of fetching multiple records and read every field.
Refer
Most efficient way to extract bit flags
Best practices for bit flags in PHP