2012-08-25 60 views
2

我想在擴展庫中訪問數據庫函數。Codeigniter-如何在擴展本地庫時使用數據庫函數?

class My_Router extends CI_Router { 

    public function __construct() 
    { 
     parent::__construct(); 
    } 

    function _set_routing() 
    { 
     ..... 
     .... 
     $query=$this->db->get('custome_routes'); 
     $custom_routes=$query->result_array(); 
     .... 

    } 
} 

下面我想也

$CI =& get_instance(); 
    $query=$CI->db->get('custome_routes'); 
    $custom_routes=$query->result_array(); 

但它不工作。

幫助我....

由於提前, 洛根

回答

3

不幸的是,你不能這樣做,因爲框架的加載順序,因爲路由信息用於決定要加載哪個控制器類,並且get_instance()的返回值是該控制器實例。

您可以嘗試使用系統/ DB.php中的require,並使用DB()函數獲取db類的實例。

public function _set_routing(){ 
    require_once BASEPATH.'database/DB.php'; 
    $db = DB('default', true); // you can set the database.php config's group, or a full DSN string here 
    $custom_routes = $db->get('custome_routes')->result_array(); 
} 

或者你可以在你的子類中做一個CI獨立的數據庫連接,對於這個「獲取全表」查詢,這應該不難。您應該能夠包含CI數據庫配置文件並毫無問題地使用它的值(注意環境)。從實例($CI->load->database();

+0

它出現錯誤「致命錯誤:類'CI_Controller'找不到' – LoganPHP

+0

@ complex857使用'BASEPATH'而不是'SYSDIR'。 – ADev

+0

奇怪的是,我沒有看到任何問題,應該這樣做,我的測試設置工作正常。我只是猜測,但也許你的'_set_routing()'的執行不起作用。 (答案中的那個顯然不是完整的方法。) – complex857

1

只是加載數據庫

$CI =& get_instance(); 
$CI->load->database(); 

$query=$CI->db->get('custome_routes'); 
$custom_routes=$query->result_array(); 

編輯:這只是圖書館工作和核心類不起作用。

+1

因爲在調用['_set_routing()'](https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/CodeIgniter.php#L164)之前發出['get_instance ()'](https://github.com/EllisLab/CodeIgniter/blob/develop/system/core/CodeIgniter.php#L227)被定義。 – complex857

+0

是的,這對核心類不起作用,但問題是路由器加載後包含「core/Controller.php」。 – ADev