You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter 4 Query Builder关联查询失效,如何获取关联实体名称?

CodeIgniter 4 关联查询获取部门对应实体名称的正确写法

问题背景

现有两张数据表:

Entities(实体表)

idnameis_freezone
1ABC LTD0
2A & B LLC0
3C & D LLC0

Divisions(部门表)

idnameentity_id
1TOYS2
2FOOD2
3HOUSEHOLD3

需要查询得到如下格式的结果:

idnameentity_name
1TOYSA & B LLC
2FOODA & B LLC
3HOUSEHOLDC & D LLC

原CodeIgniter 4代码如下,但未返回预期结果:

$db = \Config\Database::connect();
$builder = $db->table('divisions');
$builder->select('*');
$builder->join('entities', 'divisions.entity_id = entities.id');
$query = $builder->get()->getResult();

问题原因

使用select('*')会同时查询两张表的所有字段,导致:

  • 两张表的id和name字段重复,结果集中只会保留最后一个同名字段的值(比如id会变成实体表的id,而非部门表的id)
  • 没有将实体表的name字段重命名为entity_name,不符合预期的结果字段名

解决代码

明确指定需要查询的字段,给实体表的name起别名entity_name,同时通过表前缀区分同名字段:

$db = \Config\Database::connect();
$builder = $db->table('divisions');
// 指定需要的字段,给实体名称起别名,避免字段冲突
$builder->select('divisions.id, divisions.name, entities.name AS entity_name');
$builder->join('entities', 'divisions.entity_id = entities.id');
$query = $builder->get()->getResult();

说明

上述代码会精准返回部门表的id、name,以及实体表的name(别名为entity_name),完全匹配预期的结果格式。如果需要保留实体表的其他字段,也可以在select中添加,比如entities.is_freezone。

内容的提问来源于stack exchange,提问作者sarath_kanam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:10:12