我在做一个学习项目的时候,碰到了一个困难,就是后台设置选项如何存储在数据库中,毕竟设置项那么多。
比如网站标题,seo 关键字,seo 描述,什么的....
看到很多网站的 option 表是以 key,value 的形式存储的。
但是试了很久都不知道怎么把所有设置选项列在表单中,而且完成批量修改。
对了,我用的框架是 SpringMVC,谢谢大家了。
1
whatsmyip 2017-12-21 23:19:12 +08:00
你自己已经回答了。key, value 对
因为数据量不多,加上每个页面基本都需要,所以每次操作都是同时取出 select key, value from option; 修改的话只能是一个一个修改了。 之前写过的代码 ``` class OptionManager { /* * do add option */ public static function addOption($option) { $key = $option->get('key'); $value = $option->get('value'); $remark = $option->get('remark'); $key_values = array( 'key' => '?', 'value' => '?', 'remark' => '?' ); $builder = new SQLBuilder(); $builder->insert('cr_option', $key_values); $sql = $builder->build(); $params = array( $key, $value, $remark); $count = (new MysqlPDO())->execute($sql, $params); return $count==1; } /* */ public static function getOptions($rule) { $selected_rows = array('key', 'value', 'remark'); $where_arr = array(); $builder = new SQLBuilder(); $builder->select('cr_option', $selected_rows); $builder->where($where_arr); $sql = $builder->build(); $params = array(); $options = (new MysqlPDO())->executeQuery($sql, $params); if($rule->get('result_form')=='assoc'){ $options = self::list2kv($options); } return $options; } /* * convert list to key-value */ private static function list2kv($options) { $options_kv = array(); foreach($options as $option){ $options_kv[$option['key']] = $option['value']; } return $options_kv; } /* */ public static function removeOption($option) { $key = $option->get('key'); $where_arr = array('key' => '?'); $builder = new SQLBuilder(); $builder->delete('cr_option'); $builder->where($where_arr); $sql = $builder->build(); $params = array( $key ); $count = (new MysqlPDO())->execute($sql, $params); return $count==1; } /* */ public function updateOption($option) { $key = $option->get('key'); $value = $option->get('value'); $remark = $option->get('remark'); $new_key_values = array( 'value' => '?', 'remark' => '?' ); $where_arr = array( 'key'=>'?' ); $builder = new SQLBuilder(); $builder->update('cr_option', $new_key_values); $builder->where($where_arr); $sql = $builder->build(); $params = array($value, $remark, $key); $cnt = (new MysqlPDO())->execute($sql, $params); return $cnt==1; } } ``` |
2
RYAN0UP OP @whatsmyip 先谢谢你的回答,不过这 php 我看着有点蒙啊,我暂时已经把所有设置选项加载到表单里了,用的是 Map<key,value>,下一步我再想想怎么批量修改,谢谢啦!
|
3
ihuotui 2017-12-22 00:41:57 +08:00 via iPhone
俗称 eav 设计
|
4
lhx2008 2017-12-22 07:12:47 +08:00 via Android
用提交 list 的方法就行,后台再从数据库读出来,再把新的 value 塞进去,更新
或者用 ajax,改一个提交一个 |