【问题标题】:How to Perform A JOIN operation in CodeIgniter and fetch results?如何在 CodeIgniter 中执行 JOIN 操作并获取结果?
【发布时间】:2015-09-04 10:27:07
【问题描述】:

对于 CI 系统,我有一个经销商表和用户表。每个用户都通过一个名为 KEY 的字段映射到其经销商,该字段是唯一的字符串。它在用户表和经销商表中,每个用户(记录)都有一个映射到它的经销商键。我希望你理解这个概念。现在我想为管理员创建一个视图。目前我显示reseller 列表和用户列表,现在如何创建一个视图,当我点击reseller 时,我只能看到他的经销商?

这里我获取index 函数中的所有经销商如何根据密钥进行过滤

    public function index ()
        {
            $usertype=$this->session->userdata('usertype');
            if($usertype ==="admin")
                {
                    // Fetch all users
                    $this->data['users'] = $this->reseller_m->get();
                    // Load view
                    $this->data['subview'] = 'admin/reseller/index';
                    $this->load->view('admin/_layout_main', $this->data);
                }
            else
                {
                    $this->load->view('permission');
                }   
        }

【问题讨论】:

标签: php codeigniter


【解决方案1】:

你可以像这样使用CI active records

$this->db->select('*');
$this->db->from('reseller');
$this->db->join('users', 'reseller.KEY = users.KEY');
$this->db->WHERE('reseller.key',$reseller_id);
$result = $this->db->get();

只需将结果输入更改为视图。在第一页你传递所有用户结果的结果,所以如果用户点击特定的经销商,那么基本上你必须将经销商 ID 传递给控制器​​,对吗?使用该 id 只需通过 if else 条件将查询结果切换到视图。

    public function index ()
        {
            $usertype=$this->session->userdata('usertype');
            $reseller_id=$this->input->get('reseller_id');
            if($usertype ==="admin")
                {

              if($reseller_id){

                    // Fetch only resellers users

                  $this->db->select('*');
                  $this->db->from('reseller');
                  $this->db->join('users', 'reseller.KEY = users.KEY');
                  $this->db->WHERE('reseller.key',$reseller_id);
                  $this->data['users'] = = $this->db->get();

                  }else{
                    // Fetch all users
                    $this->data['users'] = $this->reseller_m->get();

                 }
                    // Load view
                    $this->data['subview'] = 'admin/reseller/index';
                    $this->load->view('admin/_layout_main', $this->data);
                }
            else
                {
                    $this->load->view('permission');
                }   
        }

【讨论】:

  • 我的意思是如果点击经销商如何只加载视图中的用户
  • 只需将结果输入更改为视图。在第一页你传递所有用户结果的结果,所以如果用户点击特定的经销商,那么基本上你必须将经销商 ID 传递给控制器​​,对吗?使用该 id 只需通过 if else 条件将查询结果切换到视图。
  • 那我应该在 achor 标签中传递它吗?
  • 我的意思是我应该创建一个单独的页面吗?
  • 当然可以!它加深了你。如果您想以不同的格式显示,那么您需要创建另一个视图,否则如果您只想切换结果而不需要
【解决方案2】:

这个怎么样?

// Fetch all users
$this->data['users'] = $this->get('users');
foreach($this->data['users'] as $ind=>$row){
  // then connect resellers to each user
  $this->data['users'][$ind]['resellers'] = $this->reseller_m->->where('key', $row['id'])->get();
}

首先,您让所有用户排列并连接到每个用户的经销商。我希望您已将“reseller_m”定义为模型,并使用我编辑的方法 where() 现在您只指定用户的 reellers。

或者我认为这一行会做同样的事情:(没有定义的模型)

$this->data['users'][$ind]['resellers'] = $this->where('key', $row['id'])->get('resellers');

【讨论】:

  • 感谢您的帮助,但请您解释一下代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
相关资源
最近更新 更多