두 테이블, departments
및 users
이 있습니다. 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'));
}
}
오 좋은를! 나는 그것을 몰랐다. 지금 일하는 것 같습니다. 감사! 추가 질문, 내 관심사 중 하나는 아니지만 지금 : 올바른 방법이 그것을 할 수 있습니까? 로드하는 부서가 많은 경우 향후이 접근 방식으로 성능 저하가 발생하지 않습니까? 더 원활하게 처리 할 수 있습니까? – Propeller
올바른 방법은 다음과 같습니다. http://book.cakephp.org/2.0/en/controllers.html#Controller::$uses 성능에는 확신이 없지만 실제로는 사용하는 것으로 생각합니다. 모델이라고 부르면됩니다. – hyarion
오케이. 감사! :) – Propeller