我需要在我的模型codeigniter中设置第二个数据库
问题描述:
我需要在我的模型codeigniter中使用第二个数据库。 我的默认是surat, 我的第二个数据库是'sistem mutu'; 我为database.php是:我需要在我的模型codeigniter中设置第二个数据库
<?php
....
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'surat',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
$db['sistem_mutu'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'sistem_mutu',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE);
我笨的代码文件夹中的应用程序/模型/ 使用DB是默认。我需要打开'sistem_mutu'数据库,而不是默认数据库('surat')。
这是我的模型代码:
<?php
//Fuile ada di model/instruksi_kerja/instruksi_kerja_model.php
defined('BASEPATH') OR exit('No direct script access allowed');
class Instruksi_Kerja_model extends CI_Model {
var $table = 'instruksi_kerja';
var $column_order = array(
'id_ik',
'nama_ik',
'kode_dokumen',
'lingkup_kerja',
'referensi',
null);
var $column_search = array(
'nama_ik',
'kode_dokumen',
'lingkup_kerja'
);
var $order = array('nama_ik' => 'desc');
public function __construct()
{
parent::__construct();
$this->load->database();
}
private function _get_datatables_query()
{
$this->db->from($this->table);
$i = 0;
foreach ($this->column_search as $item) // loop column
{
if($_POST['search']['value']) // if datatable send POST for search
{
if($i===0) // first loop
{
$this->db->group_start(); // open bracket. query Where with OR clause better with bracket. because maybe can combine with other WHERE with AND.
$this->db->like($item, $_POST['search']['value']);
}
else
{
$this->db->or_like($item, $_POST['search']['value']);
}
if(count($this->column_search) - 1 == $i) //last loop
$this->db->group_end(); //close bracket
}
$i++;
}
if(isset($_POST['order'])) // here order processing
{
$this->db->order_by($this->column_order[$_POST['order']['0']['column']], $_POST['order']['0']['dir']);
}
else if(isset($this->order))
{
$order = $this->order;
$this->db->order_by(key($order), $order[key($order)]);
}
}
function get_datatables()
{
$this->_get_datatables_query();
if($_POST['length'] != -1)
$this->db->limit($_POST['length'], $_POST['start']);
$query = $this->db->get();
return $query->result();
}
function count_filtered()
{
$this->_get_datatables_query();
$query = $this->db->get();
return $query->num_rows();
}
public function count_all()
{
$this->db->from($this->table);
return $this->db->count_all_results();
}
public function get_by_id($id)
{
$this->db->from($this->table);
$this->db->where('id_ik',$id);
$query = $this->db->get();
return $query->row();
}
public function save($data)
{
$this->db->insert($this->table, $data);
return $this->db->insert_id();
}
public function update($where, $data)
{
$this->db->update($this->table, $data, $where);
return $this->db->affected_rows();
}
public function delete_by_id($id)
{
$this->db->where('id_ik',$id);
$this->db->delete($this->table);
}
}
谢谢您的帮助。
答
改变如下的构造方法:
public function __construct()
{
parent::__construct();
$this->load->database();
$this->db = $this->load->database('sistem_mutu', TRUE); //<---initialize db with second database
}
+0
感谢您的帮助。我喜欢这个。 –
+0
默认情况下'$ this-> db'是默认变量,如这里所写,由于您覆盖了'$ this-> db'变量,所以第一行就足够了。但是这也意味着在这个模型中默认连接将不可用。 – Tpojka
您可以设置新的连接,但每次需要ASLO开关DB。从[docs](https://www.codeigniter.com/userguide3/database/connecting.html#connecting-to-multiple-databases):如果您只需要使用不同的数据库配置,则不需要创建单独的数据库配置数据库在同一连接上。您可以根据需要切换到不同的数据库,如下所示:_'$ this-> db-> db_select($ database2_name);' – Tpojka
您是否想过自动加载数据库还可以使用'$ this-> load - > database();'时间 – user4419336