我可以使用在表单中输入的值作为列在CakePHP中动态创建表吗?

时间:2009-04-02 06:42:22

标签: cakephp

我可以使用根据网页中输入的值创建的列动态创建数据库中的表吗?

实际上我需要创建一个用户可以用来创建表单和模板的应用程序,通过邮件链接从他人那里获取数据并将它们存储在数据库中。每个用户可以创建具有不同字段的不同表单,并将其发送给许多人,他们反过来填写数据并提交表单。那么如何存储数据,因为每个表单都有不同的字段?

2 个答案:

答案 0 :(得分:3)

不是动态创建表,也许最好看看如何在静态表中表达数据。

怎么样:

  • 一个名为'forms'的表格,其中包含'id','user_id','created','modified'等。
  • 一个名为'fields'的表格,其中包含'id','form_id','type','label','required','properties'等。
  • 一个名为'answers'的表,其中包含'id','form_id','field_id','answer'等。

这样你依赖连接而不是执行大量的结构化SQL。你的理智会感谢你。

答案 1 :(得分:1)

是的,你可以这样做。这不是cakePHP特有的:您只需要知道用于创建列并删除它们的SQL代码,并将该SQL放入query()调用中。

This page是你的朋友。

你是否应该这样做是另一回事;通常,您不应该在运行时修改数据库或表结构 - 仅在安装或升级期间。例如,如果您需要实现的是允许为用户配置文件或类似的东西创建自定义字段,那么在运行时修改表结构不是答案。您要做的是有一个包含所有自定义字段的单独表,以及一个包含所有值以及字段ID和用户ID的表。这将是规范化的正确方法;是的,它确实涉及三个表而不是一个,但它比在一个表中具有列user_customfield1,user_customfield2,user_customfield3更好,并且在运行时修改该结构。