如何在codeigniter中动态连接表?

时间:2016-11-05 06:52:40

标签: php mysql codeigniter

我希望通过将表名作为参数传递,在codeigniter中动态连接表。 下面是我调用模型函数的控制器函数

function index(){  
$table=array('branch'=>'branch_id','specialization'=>'spec_branch_id');
$this->model->join($table);
}

这是我的模特函数

function join($table){

    foreach($table as $table_name=>$table_id){  
        /*i want here table*/       
        $table1=$table_name;
    }
    $this->db->select('*');
    $this->db->from(''.$table1.' t1');
    $this->db->join(''.$table2.' t2','t1.'.$t1id.'=t2.'.$t2id);

    return $this->db->get();

    echo $this->db->last_query();die;
}

如上所述,我想要像table1 = branch这样的动态表名; table2 =在我的模型函数中的specializaton,所以请帮我解决,如果有人有另一个也可以分享。

2 个答案:

答案 0 :(得分:4)

这是我的自定义代码动态加入。

模式表单。

 <?php public function commonGet($options) {

            $select = false;
            $table = false;
            $join = false;
            $order = false;
            $limit = false;
            $offset = false;
            $where = false;
            $or_where = false;
            $single = false;
            $where_not_in = false;
            $like = false;

            extract($options);

            if ($select != false)
                $this->db->select($select);

            if ($table != false)
                $this->db->from($table);

            if ($where != false)
                $this->db->where($where);

            if ($where_not_in != false) {
                foreach ($where_not_in as $key => $value) {
                    if (count($value) > 0)
                        $this->db->where_not_in($key, $value);
                }
            }

            if ($like != false) {
                $this->db->like($like);
            }

            if ($or_where != false)
                $this->db->or_where($or_where);

            if ($limit != false) {

                if (!is_array($limit)) {
                    $this->db->limit($limit);
                } else {
                    foreach ($limit as $limitval => $offset) {
                        $this->db->limit($limitval, $offset);
                    }
                }
            }


            if ($order != false) {

                foreach ($order as $key => $value) {

                    if (is_array($value)) {
                        foreach ($order as $orderby => $orderval) {
                            $this->db->order_by($orderby, $orderval);
                        }
                    } else {
                        $this->db->order_by($key, $value);
                    }
                }
            }


            if ($join != false) {

                foreach ($join as $key => $value) {

                    if (is_array($value)) {

                        if (count($value) == 3) {
                            $this->db->join($value[0], $value[1], $value[2]);
                        } else {
                            foreach ($value as $key1 => $value1) {
                                $this->db->join($key1, $value1);
                            }
                        }
                    } else {
                        $this->db->join($key, $value);
                    }
                }
            }


            $query = $this->db->get();

            if ($single) {
                return $query->row();
            }


            return $query->result();
        } ?>

并查看索引页

 <?php  function index(){  

    $option = array(
    'table' => 't1',
    'join' => array('t2' => 't2.id = t1.id')
    );
    $this->model->commonGet($option);
    }?>

答案 1 :(得分:0)

您也可以尝试使用此代码进行两个表连接。

控制器功能。

function index(){           
$table=array('branch'=>'branch_id','specialization'=>'spec_branch_id');
$this->model->join($table);
}

模型功能

function join($tables){
$i=1;
foreach($tables as $table_name=>$table_id){ 
    ${'table'.$i}=$table_name;
    ${'t'.$i.'id'}=$table_id;
    $i++;
}

$this->db->select('*');
$this->db->from(''.$table1.' t1');
$this->db->join(''.$table2.' t2','t1.'.$t1id.'=t2.'.$t2id);

//$this->output->enable_profiler(TRUE);
return $this->db->get();        
}