2011-05-28 97 views
0

我在DB中有一组对象,它们可以有多个与它们相关的布尔标志。在SQL数据库中存储标志并在Symfony中处理它们

这些标志将被预定义,但可能稍后会添加或删除标志。我可以将它们存储在FlagIDFlagName的表格中。

存储这些标志的值很容易 - 在这个表中的条目将表明“设定”标记 - 他们可以在包含ObjectIDFlagID一个简单的表被保存。

如果我随后通过连接进行了查询,则可以很容易地用它们的'set'标志提取Objects

但我的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 

这样,下面的数据,我并不需要所有的未设置标志存储针对每一个对象,因此我不需要担心预填充每当添加一个标志时,表格都会有未设置的标志。

是否有查询会生成此结果集?

回答

2

你需要的东西,像这样:

select object.id, 
     flags.id, 
     object_flags.flag_id is null as has_flag 
from objects 
cross join flags 
left join object_flags 
on object_flags.object_id = objects.id 
and object_flags.flag_id = flags.id 
相关问题