2013-05-22 3 views
0

현재 사용자를 기반으로 다른 데이터베이스를 사용해야하는이 프로젝트를 작성했습니다. Datamapper 확장과 함께 codeigniter를 사용하고 있습니다. 그러나 구성 PARAMS는 달리, 데이터베이스 PARAMS가에서 액세스 할 수하지 않는 것현재 사용자를 기반으로 데이터베이스를 동적으로 설정

var $db_params = 'user_specific'; 

:

이상적인 내가 좋아하는 내 datamapper 모델에서 사용할 수있는 컨트롤러에서 다른 연결 그룹을 설정하는 것입니다 컨트롤러 내부. this 질문에 대한 답변으로 새로운 datamapper 개체를 만들 때 변수 ($ db)를 전달해야하는 방법을 찾았습니다. 이 모든 곳에서 $ DB를 변수를 추가하는 많은 일이 그래서

$customers = new customer(NULL, $db); 
// The NULL I would need becuase the constructor expects an ID or nothing by default 

그러나, 대부분의 모델은 다른 솔루션은 그냥 할 수 있는가 ... 동적 설정을 사용

$customer = new customer(); 

// And in my model use the dynamic 'config' settings like 
var $db_params = 'user_specific'; 

큰 도움이 될 것입니다. 미리 감사드립니다.

답변

0

업데이트 :

더 간단한 방법은 당신이 이미 연결하려는 연결 그룹을 검색 할 때 데이터베이스에 연결하는 것입니다. 컨트롤러 사용에 :

class SomeController extends MY_Controller{ 

    public function index(){ 

     $connection_group = getCustomerConnectionGroup(); //example only 
     $this->load->database($connection_group); 

    } 

} 

당신은 런타임에 연결 그룹을 변경할 수는 없지만 연결 ID를 반환하여 그것을 해결하려면 일반 지금 MY_Controller

의 클래스 속성
<?php 

class MY_Controller extends CI_Controller{ 

    protected $mydb; 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->connect_to('default'); 
    } 

    public function connect_to($group) 
    { 
     $this->mydb = $this->load->database($group, true); 
    } 

} 

?> 

로 저장 컨트롤러는이 작업을 수행하여 당신이

를 사용할 필요가있는 다음을

class SomeController extends MY_Controller{ 

    public function index(){ 

     $connection_group = getCustomerConnectionGroup(); //example only 
     $this->connect_to($connectionGroup); 

    } 

} 

주를 사용하는 것

$ this-> mydb-> method();

귀하의 응용 프로그램을 통해.

+0

어디서이 작업을할지는 알지만, Datamapper ORM을 사용하고 있으므로 내 컨트롤러에있는 데이터베이스에 연결할 필요가 없습니다. 모델은 이것을 처리합니다. – Brainfeeder

관련 문제