我刚才使用JSON ..我知道这可能已经在这里被问过,但是,我只是想咨询一下,如果我做的是正确的事。
我需要为不同的页面创建动态表单。我需要能够为每个页面添加动态表单。在管理面板中,我可以在页面模板中添加/编辑/删除字段 - 更改字段,名称,类型,值等的顺序。
所以,我做了什么,我将动态表单字段存储在json中,对于在每个页面中输入的数据,我也将它存储在json中。以下是存储在我的数据库中的示例JSON数据:
包含2个字段的动态表单的JSON结构:
{
"0":{
"id":"511ddf15cb8ae_1", // generated using uniqid() and counter, to generate a unique id for each field
"name":"Page Name #1",
"type":"textfield",
"validation":"email",
"require":"on",
"value":"" //default value
},
"1":{
"id":"511ddf15cb8ae_2",
"name":"Field Name #2",
"type":"checkbox",
"validation":"none",
"require":"on",
"value":["item 1","item 2","item 3"] //selection
}
}
存储了输入值的JSON:
{
"511ddf15cb8ae_1": //the field id, used as key to be able to directly access the data
"test new data",
"511ddf15cb8ae_2":
["item 1","item 2"]
}
我的主要问题是,如果我在数据库中使用json存储输入的值是否可以,或者我应该单独存储输入的值 - db table row。
有任何想法以更好的方式做到这一点,或者这已经很好了吗?感谢。
干杯
答案 0 :(得分:0)
取决于您下一步的计划:)。
你采取的方法非常好,如果你只是计划稍后重建表单并填入输入的值(我相信你也存储了动态表单),在这个意义上你不需要使用复杂查询从输入的值重新构造json。
但是,如果您稍后对在相应字段上输入的值进行一些复杂的调查/查询,例如“特定用户在特定字段中输入特定值的次数?”,那将会很繁琐。的种类。如果您打算这样做,那么我建议采用关系方法并将它们存储在表格中;动态表格和输入的值。
答案 1 :(得分:0)
将它作为字符串存储在SQL数据库中是可以的,因为您始终可以stringify
和parse
但我发现这非常繁琐,尤其是当我想要进行JOIN操作或具有复杂结构时坚持代表。既然你已经在JSON中使用它,为什么不使用像MongoDB这样的NoSQL持久存储机制并存储JSON本身。
MongoDB allows you to save JSON documents in BSON format,然后对它们进行查询,这是您当前实现所缺少的内容。
事实上,您可以在他们的网站上打开交互式MongoDB shell,并使用以下内容对数据库进行原型设计:
> var page = {"name":"Page Name #1", "type":"textfield", "validation":"email", "require":"on", "value":"aValue"};
{
"name" : "Page Name #1",
"type" : "textfield",
"validation" : "email",
"require" : "on",
"value" : "aValue"
}
> db.pages.save(page);
"ok"
从那里开始,一旦添加了所有页面,您现在可以拥有健壮的查询,例如,这将找到textfield类型的所有页面:
db.pages.find({"type":"textfield"});
您还可以使用值字段执行更复杂,更强大的查询,但我会留给您。