CodeIgniter左联查询无法显示id_eskul,请求技术协助
解决左外连接后
id_eskul显示NULL的问题 我来帮你定位问题根源并给出解决方案:
问题核心原因
你的join1方法用了select('*')查询所有字段,但eskul和waktudaftar两个表都存在id_eskul字段。在左外连接场景下,waktudaftar表没有匹配数据,它的id_eskul值为NULL;而PHP处理查询结果时,重复的键名会被后面的字段覆盖——也就是waktudaftar.id_eskul(NULL)覆盖了eskul.id_eskul(实际有效值),最终视图里拿到的就是NULL。
具体解决方案
1. 精确指定查询字段(推荐)
不要用select('*'),而是明确列出需要的字段,避免重复字段冲突。比如:
修改模型的join1方法中的select语句:
// 方案1:只选eskul的所有字段,加上waktudaftar需要的字段(如果有) $this->db->select('eskul.*, waktudaftar.waktu_mulai, waktudaftar.waktu_selesai'); // 方案2:给重复字段起别名,保留两个表的id_eskul $this->db->select('eskul.id_eskul as eskul_id, eskul.nama_eskul, waktudaftar.id_eskul as waktudaftar_id, waktudaftar.*');
2. 调整视图中的字段引用
如果给字段起了别名,记得在视图里使用别名获取值。比如用了eskul_id作为别名,视图里就要写:
<?php echo $item->eskul_id; ?>
而不是原来的$item->id_eskul。
3. 可选:优化连接条件写法(更规范)
你的连接条件可以调整为更直观的顺序,虽然不直接解决NULL问题,但可读性更强:
$list['eskul'] = $this->m_crud->join1("eskul","waktudaftar","eskul.id_eskul = waktudaftar.id_eskul")->result();
验证步骤
修改后可以先在控制器里打印查询结果,确认字段值是否正确:
var_dump($list['eskul']);
确认id_eskul(或别名后的字段)是eskul表的有效值后,再去视图渲染即可。
内容的提问来源于stack exchange,提问作者Sylvia Helmi
相关产品推荐
相关产品推荐

