CodeIgniter关联表数据无法渲染到下拉框问题求助
CodeIgniter关联表数据渲染下拉框问题修复
问题描述
在CodeIgniter框架中,尝试关联tb_users.id_user与tb_bonus.id_user,将用户姓名渲染到下拉框,但下拉框仅显示默认选项,无任何用户数据。
原始尝试代码
模型(Umum_model.php)
function getNama(){ $this->db->select('*'); $this->db->from('tb_bonus'); $this->db->join('tb_users', 'tb_users.id_user = tb_bonus.id_user'); $join_query = $this->db->get(); }
控制器(Bonus.php)
function __construct() { parent::__construct(); $this->load->library('form_validation'); $this->load->model('Umum_model', 'umum'); } public function index() { $data = [ 'view' => 'admin/bonus', 'active' => 'bonus', 'sub1' => 'bonus', ]; $namalengkap['namaUser'] = $this->umum->getNama(); $this->load->view('template_admin/index', $data, $namalengkap); }
视图(bonus.php)
<select class="form-control" id="id_user" name="id_user" required> <option value="">No Selected</option> <?php foreach($namaUser as $nama){ ?> <option value=""><?=$nama->nama_lengkap?></option> <?php } ?> </select>
问题分析
- 模型未返回查询结果:
getNama()函数仅执行查询,未返回结果集,导致控制器无法获取数据 - 控制器数据传递错误:CodeIgniter的
load->view()第三个参数是布尔值(控制是否返回视图内容),不能用于传递额外数据,需将数据合并到主$data数组 - 视图存在两处问题:下拉框
option的value为空(无法提交有效ID);未处理数据为空的边界情况 - 查询逻辑优化:原查询从
tb_bonus出发,可能遗漏无奖金记录的用户;且select *会获取冗余字段,建议按需选择字段并去重
修正后的代码
模型(Umum_model.php)
function getNama(){ // 仅选择需要的字段,避免冗余 $this->db->select('tb_users.id_user, tb_users.nama_lengkap'); $this->db->from('tb_users'); // 若需仅显示有奖金记录的用户用inner join,需显示所有用户则改为left join $this->db->join('tb_bonus', 'tb_users.id_user = tb_bonus.id_user', 'inner'); // 去重避免同一用户多次出现 $this->db->distinct(); // 返回对象格式的结果集 return $this->db->get()->result(); }
控制器(Bonus.php)
function __construct() { parent::__construct(); $this->load->library('form_validation'); $this->load->model('Umum_model', 'umum'); } public function index() { $data = [ 'view' => 'admin/bonus', 'active' => 'bonus', 'sub1' => 'bonus', // 将用户数据合并到$data数组,传递给视图 'namaUser' => $this->umum->getNama() ]; $this->load->view('template_admin/index', $data); }
视图(bonus.php)
<select class="form-control" id="id_user" name="id_user" required> <option value="">未选择</option> <?php if(!empty($namaUser)): ?> <?php foreach($namaUser as $nama): ?> <!-- 设置option的value为用户ID,便于提交表单时获取有效数据 --> <option value="<?= htmlspecialchars($nama->id_user) ?>"> <?= htmlspecialchars($nama->nama_lengkap) ?> </option> <?php endforeach; ?> <?php else: ?> <!-- 无数据时显示提示并禁用选项 --> <option value="" disabled>暂无用户数据</option> <?php endif; ?> </select>
内容的提问来源于stack exchange,提问作者sound_of_coups
相关产品推荐
相关产品推荐

