我希望通过将表名作为参数传递,在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,所以请帮我解决,如果有人有另一个也可以分享。
答案 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();
}