我正在努力寻找解决问题的最佳方案。
基本上我有一个表单,主要由复选框组成,但表单将有60-90个复选框。我将有一些这样的形式,所以我遇到的问题是如何以最通用或简单的方式创建它,所以我不必手动为每个表创建每个表单。
我的解决方案是简单地创建一个表格,这里的下方是我得到一个包含大约90列的表,在任何客户端中查看都非常混乱,并且随着表的增长对性能有一点影响但是没有那么多大多数字段类型都是tinyint。
在我的模型中,我将模式基本上定义为数组:
$schema = array(
'column_name' => array('checkbox(input field type)', 'label')
);
public function getSchema()
{
$this->schema['column_name]['value'] = $this->column_name;
// .. Now I have to type this 100 times by hand..
}
这现在允许我只有一个表格并轻松生成所有字段
<form>
@foreach($schema as $field => $attrs)
@if($attrs[0] == 'checkbox')
<input type="checkbox" name="{{ $field }}" value="{{ $attrs['value'] }} {{ ($attrs['value'] == 1) ? 'checked' : '' }}>{{ $attrs[1] }}
@elseif($attrs[0] == 'text')
...
@endif
@endforeach
</form>
所以这是一个非常优雅的解决方案,但是如果我必须在getSchema()函数中为每个字段定义它们的值,或者我必须首先定义模式数组,最后就好像我定义了两个无论如何形式。
我想我在这里找到了一些解决方案,但不完全知道如何摆脱手动定义架构数组和方法。
我的一个想法是只有一个字段值,并在我的模型中定义局部变量,在执行IO并序列化对象并存储它时填充这些,但这似乎是浪费和糟糕的做法。
答案 0 :(得分:6)
只需创建一个包含4列的新表
++++++++++++++++++++++++++++++++++++++++
id + entity_id + form_key + form_value
++++++++++++++++++++++++++++++++++++++++
这样,您的所有值都将被编入索引,并且更易于管理。
答案 1 :(得分:4)
复选框 - &gt; 2个选项= 1位。
一个整数有32位。 一个长整数甚至更多。
您可以将复选框存储到位掩码中。从而将100个复选框存储到2-4个表列中。您可以轻松搜索,选择和更新,因为mysql可以轻松提供位操作。
在缺点方面,任何使用数据库管理(例如phpmyadmin)和直接访问数据库的工作都是残酷的。