Codeigniter下拉列表重复问题及按中心分组批量创建学校数据实现
问题修复方案
1. 修复下拉列表重复问题
代码核心错误是将group_by语法错误写入了get_where的查询条件参数中,导致分组去重逻辑未生效,查询返回所有未去重的学校记录,最终出现下拉选项重复的问题。
修正后的Controller代码:
// 调用独立的group_by方法实现按centre字段分组去重 $this->centre = $this->db->group_by('centre') ->get('schools') ->result();
修改后查询返回的每个centre仅对应一条记录,下拉遍历后不会再出现重复选项。
2. 实现按中心批量同步创建数据功能
在表单提交对应的Controller处理方法中,新增如下逻辑即可:
// 1. 接收表单提交的选中中心ID $selected_centre_id = $this->input->post('centre_id'); // 2. 查询该中心下所有关联的学校列表 $related_schools = $this->db->get_where('schools', ['centre' => $selected_centre_id])->result_array(); // 3. 组装批量插入的数据集,请根据实际业务替换字段 $insert_batch_data = []; foreach ($related_schools as $school) { $insert_batch_data[] = [ 'school_id' => $school['id'], // 替换为实际需要存储的表单字段、公共字段 'data_name' => $this->input->post('data_name'), 'created_at' => date('Y-m-d H:i:s') ]; } // 4. 执行批量插入 if (!empty($insert_batch_data)) { // 替换为实际业务表名 $this->db->insert_batch('your_business_table', $insert_batch_data); }
可选优化:下拉列表按中心分组展示
如果需要下拉按中心分组显示关联学校,可以修改View代码使用<optgroup>标签实现:
<select name="centre_id"> <?php foreach ($centre as $c) { ?> <optgroup label="<?php echo $c->centre; ?>"> <option value="<?php echo $c->id; ?>" <?php if(isset($school_id) && $school_id == $c->id) echo 'selected'; ?> > <?php echo $c->school_name; ?> </option> </optgroup> <?php } ?> </select>
内容的提问来源于stack exchange,提问作者hlzoic
相关产品推荐
相关产品推荐

