2011-09-11 4 views
0

Cakephp에서 기본 변수 중 하나를 설정할 수 있습니까? 나는 클라이언트마다 다른 테이블을 원한다.useTable을 선택하는 Cakephp 동작?

나는 설정 기능에서 그것을 쓰는 생각하지만, 대부분의 변수는 완전히 비어 있습니다. app_controller.php의 beforeFind()에 $ this-> subdomainid를 만듭니다. 분명히 모델에서는 사용할 수 없습니다.

하지만 궁금한데, 내가 동작에서 useTable을 선택할 수 있습니까? PHP에서 호스트 이름을 확인한 후 하위 도메인을 기반으로한다면 subdomain_tablename을 테이블로 사용할 수 있습니까? subdomain_recipes, subdomain_ingredients, client_ 및 일반 명명 규칙과 같은 테이블에 대해이 이름 지정 규칙을 사용하고 싶습니다.

나는 현재 3 개의 하위 도메인 밖에 가지고 있지 않지만 다른 하위 도메인의 테이블에 데이터를 혼합하고 싶지는 않습니다. 나는 며칠 동안 해결책을 생각해 왔으며 함께 생각하는 것도 환영 할 만하다.

답변

1

당신이 동일한 데이터베이스에 다른 테이블에 대해 이야기하는 경우 당신은 이런 식으로 뭔가를 할 수 있습니다

당신이 app_Model

에서 같은 접두사

와 모든 모델의 테이블을 변경하려는 경우

function __construct($id = false, $table = null, $ds = null) { 
     $prefix = getPrefix(); 
    $this->useTable = $prefix.$useTable; 
    parent::__construct($id,$table,$ds); 
} 

이렇게하면 모델 테이블을 사용하기 전에 모든 모델 테이블을 변경해야합니다. 모델 클라이언트 만 수정하려는 경우이 모델에서 동일한 기능을 수행하려면 클라이언트 모델에이 동일한 기능을 넣으십시오. . 당신은 beforeFind를 사용하여 비슷한 일을 수행해야합니다 S를 당신이 bahaviour에서 작업을 수행하려는 경우 : 당신이 모든 일을 제외하려면이 비록 행동되지 않습니다

function __construct($id = false, $table = null, $ds = null) { 
    $prefix = getPrefix(); 
    if ($this->name != 'Client') 
     $this->useTable = $prefix.$useTable; 
    parent::__construct($id,$table,$ds); 
} 

처럼 app_model에 그것을 할 수 있지만,이 문제가 해결 , beforeSave, etc. (데이터베이스에서 무엇인가를하는 모든 befores) 또는 모델을로드 할 때 컨트롤러에서 (this $ this-> Client-> useTable = $ prefix와 같을 것입니다.) $ this-> Client-> useTable ;)

getPrefix() 함수는 사용할 접두사를 알려주는 함수라는 것을 기억하십시오.

나는 항상 var $ useTable = 'table'을 써야한다고 생각한다; 이 일을하기 위해서.

다른 데이터베이스를 원한다면 this solution 빵집에 게시하십시오.