2011-02-07 13 views
1

適切な構成配列をdatabase.phpに追加しましたが、それらは機能しますが、別のデータベースに簡単にアクセスしたいと思います。今、私はすべてのコントローラメソッドでは、このような何かをする必要があります:コードイグナイターで複数のデータベースをロードする便利な方法

function index(){ 
    $BILLING = $this->load->database('billing', TRUE); 
    $INVENTORY = $this->load->database('inventory', TRUE); 

    $data['billing'] = $BILLING->get('stuff'); 
    $data['inventory'] = $INVENTORY->get('stuff'); 
} 

私が前にフィルタまたはpre_controllerフックのいくつかの並べ替えでは、これらの最初の2行を置くことができるようにしたいと思います。

答えて

8

あなたは単に、彼らはすべてのコントローラのメソッドが利用できるようになり、あなたのコンストラクタでグローバルデータベースインスタンスをロードすることができ...

例コントローラ

class Example extends CI_Controller { 

    //declare them globally in your controller 
    private $billing_db; 
    private $inventory_db; 

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

     //Load them in the constructor 
     $this->billing_db = $this->load->database('billing', TRUE); 
     $this->inventory_db = $this->load->database('inventory', TRUE); 
    } 

    function index() { 

     //Then use them in any controller like this 
     $data['billing'] = $this->inventory_db->get('stuff'); 
     $data['inventory'] = $this->billing_db->get('stuff'); 

    } 

} 

そして、これらの同じデータベースを複数にまたがって使用されている場合

これらのグローバル変数を含むようにベースコントローラーを拡張し、ベースコントローラーのコンストラクターにロードすることを検討することがあります。 MY_Controller.php

MY_Controller.php

class DB_Controller extends CI_Controller { 

    //declare them globally in your controller 
    private $billing_db; 
    private $inventory_db; 

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

     //Load them in the constructor 
     $this->billing_db = $this->load->database('billing', TRUE); 
     $this->inventory_db = $this->load->database('inventory', TRUE); 
    } 

} 

その後、あなたはこのようにそれを使うだろう...すべてのコントローラにわたって

class Example extends DB_Controller { 

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

    function index() { 

     //Then use them in any controller like this 
     $data['billing'] = $this->inventory_db->get('stuff'); 
     $data['inventory'] = $this->billing_db->get('stuff'); 

    } 

} 
+0

はさらに良いでしょう。どのようにCI_Controllerを拡張するかのスニペットを投稿してもよろしいですか? – Dex

+0

これは、CI_Controllerを拡張するという点で、あなたが探しているものかもしれません:http://philsturgeon.co.uk/news/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY – JDM

+0

またはCIのドキュメントhttp: //codeigniter.com/user_guide/general/core_classes.html ...あなたは、あなたの拡張ベースコントローラーに私のサンプルコントローラーに入れたロジックを置くだけです。 – jondavidjohn

関連する問題