2013-03-25 2 views
0

두 테이블, departmentsusers이 있습니다. users, 나는 다음과 같은 필드가 있습니다 departments에 지금다른 테이블의 다른 필드 값 가져 오기? CakePHP

id | username | password | email | department | date_created 

을, 나는 다음과 같은 필드가 있습니다

id | name 

users 테이블에 department 필드 INT이며, 그것은에 id 대응을 가리키는 departments 테이블 웹에서 렌더링 할 때 해당 name을 검색하여 department 필드에 표시하려면 어떻게합니까? 나는이 일을 시도했지만 작동하지 않는 것 같습니다.

class UsersController extends AppController { 

    public function index() { 
     $this->set('users', $this->User->find('all')); 

     $departmentsArray = array(); 
     $departments = $this->Department->find('all'); 
     foreach ($departments as $department) { 
      $departmentsArray[$department['Department']['id']] = $department['Department']['name']; 
     } 
     $this->set('departments', $departmentsArray); 
    } 

} 

나는 가정 View\Users\index.ctp에서 데이터를 검색하는 데 사용할 것입니다.

Error: Call to a member function find() on a non-object 
File: D:\server\root\app\Controller\UsersController.php 
Line: 11 

라인 (11)가 내가 위에서 준 첫 번째 코드 블록에서 $departments = $this->Department->find('all');이다 : 그러나, 그것은 나에게 오류를 제공합니다.

죄송합니다.이 모든 것이 너무 복잡해 보이면 여기에 접근하는 간단한 방법이 있다면 알려주십시오. 간단히 말해서 다른 테이블에서 정의 된 ID를 통해 테이블에서 데이터를 검색해야합니다.

편집 :

추가 정보를 원하시면 Hyarion에서, 나는 find('list') 그래서 난 6에서 1에 코드의 라인을 감소 사용하는 대신 find('all')을 사용! :) 새 코드는 다음과 같습니다.

class UsersController extends AppController { 
    var $uses = array('User', 'Department'); 

    public function index() { 
     $this->set('users', $this->User->find('all')); 

     $this->set('departments', $this->Department->find('list')); 
    } 

} 

답변

5

부서에 모델을로드하도록 컨트롤러에 지시해야합니다. 기본적으로 사용자로드 만 가능합니다.

컨트롤러의 상단이 추가 :

var $uses = array('User', 'Department'); 
+0

오 좋은를! 나는 그것을 몰랐다. 지금 일하는 것 같습니다. 감사! 추가 질문, 내 관심사 중 하나는 아니지만 지금 : 올바른 방법이 그것을 할 수 있습니까? 로드하는 부서가 많은 경우 향후이 접근 방식으로 성능 저하가 발생하지 않습니까? 더 원활하게 처리 할 수 ​​있습니까? – Propeller

+0

올바른 방법은 다음과 같습니다. http://book.cakephp.org/2.0/en/controllers.html#Controller::$uses 성능에는 확신이 없지만 실제로는 사용하는 것으로 생각합니다. 모델이라고 부르면됩니다. – hyarion

+0

오케이. 감사! :) – Propeller