【问题标题】:CodeIgniter - Active Record joinCodeIgniter - Active Record 加入
【发布时间】:2013-11-09 23:22:00
【问题描述】:

我的 CodeIgniter 模型中有一些代码:

        $this->db->where('building_active', 1);
        $this->db->select('*');
        $this->db->from('buildings');
        $this->db->join('users_buildings', 'users_buildings.building_id = buildings.building_id');
        $this->db->join('buildings_levels', 'buildings_levels.level_id = users_buildings.level_id');
        $buildings = $this->db->get()->result();

我想做什么:

  1. 如果可能,我想选择所有建筑物并加入 users_buildings。当前的问题是,只有在 users_buildings 中有相应条目的建筑物才会被选中。

  2. 既然没有用于第二个连接子句的 level_id(如果该建筑物没有可用的 users_buildings),则必须有一个后备来将连接子句更改为 building_levels.level_id = 0

我希望我的意思很清楚。我不知道这是否可能。

【问题讨论】:

  • $this->db->get()->result(); 或者你的意思是$this->db->result_array()
  • 嗯,还有 $this->db->get()->result();最后还是什么意思?

标签: mysql codeigniter activerecord join


【解决方案1】:

通过将内连接更改为左连接来回答您的第一个问题:

$this->db->join('users_buildings', 'users_buildings.building_id = buildings.building_id', 'left');
$this->db->join('buildings_levels', 'buildings_levels.level_id = users_buildings.level_id', 'left');

这将为缺失值返回null。如果您希望 null 是 0null 或其他内容,我不太明白。

【讨论】:

  • 谢谢,成功了。我决定删除第二个加入并以不同的方式解决问题,所以你的答案就是我所需要的。
猜你喜欢
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2012-06-27
  • 2012-11-29
  • 2013-06-14
相关资源
最近更新 更多