我需要在我的模型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); 
    } 


} 

谢谢您的帮助。

+0

您可以设置新的连接,但每次需要ASLO开关DB。从[docs](https://www.codeigniter.com/userguide3/database/connecting.html#connecting-to-multiple-databases):如果您只需要使用不同的数据库配置,则不需要创建单独的数据库配置数据库在同一连接上。您可以根据需要切换到不同的数据库,如下所示:_'$ this-> db-> db_select($ database2_name);' – Tpojka

+0

您是否想过自动加载数据库还可以使用'$ this-> load - > database();'时间 – user4419336

改变如下的构造方法:

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