在Laravel

时间:2015-09-02 10:34:40

标签: laravel-5

我正在使用Laravel 5.1来构建用于创建表单的应用程序。

每个表单都是Form模型的一个实例。每个表单可能具有不同的字段范围。可能的字段在Fields表(i.e: *first_name*, *surname*, *date_of_birth*, *postcode*, etc)中定义。 Form和Field模型之间存在许多关系。

为了收集表单数据,我正在考虑为每个Form实例创建一个新表。

例如,用户创建一个包含字段*first_name*, *surname*, *date_of_birth* and *postcode*的表单。添加表单后,将使用

创建表
 Schema::create('form_' . $form->id, function($table) {[... fields ...}).

当用户提交表单时,将使用Form实例作为模型验证数据,然后将其插入到定义的表中。

我怀疑这是一个坏的或非正统的想法(主要是因为在飞行中创建表格感觉有风险)但会欣赏第二意见。

有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

你是对的,相信你怀疑某些东西对于动态创建表格感觉不太正确感觉。这真的不是一个好主意。用于运行应用程序的用户可能不应具有CREATE权限,但这是一个单独的主题。

一个解决方案,做你想做的就是有三个不同的表,并利用多态来存储代表每个表单的不同数据类型。

示例表

注意:每个表中的字段仅作为示例给出,您可能需要根据自己的业务需求进行扩展。

形式

此表存储已创建的每个表单。

|--------------------------------------------------------------------|
| id | name         | description                       | creator_id |
|--------------------------------------------------------------------|
| 1  | Example form | An example of how to setup forms. | 1          |
|--------------------------------------------------------------------|

form_fields

此表存储表单中可用的每个字段。 required字段显示了如何开始构建验证规则。可以添加更多列以扩展此想法(最小值,最大值等)。

|--------------------------------------------------------------------|
| id | form_id | type      | label         | required | default      |
|--------------------------------------------------------------------|
| 1  | 1       | text      | Name          | 1        |              | 
| 2  | 1       | text      | E-mail        | 1        |              | 
| 3  | 1       | textarea  | Comments      | 1        | Your message | 
|--------------------------------------------------------------------|

form_data

此表存储每个表单的提交数据。

|-----------------------------------------------------------------|
| id | form_id | field_id | data            | created_at          |
|-----------------------------------------------------------------|
| 1  | 1       | 1        | Joe             | 2015-09-02 12:01:00 |
| 2  | 1       | 2        | joe@domain.com  | 2015-09-02 12:01:00 |
| 3  | 1       | 3        | Test comment    | 2015-09-02 12:01:00 |
|-----------------------------------------------------------------|