2010-12-21 6 views
1

두 테이블 - usersservers이 있고 HABTM 관계의 경우 users_servers입니다. 사용자 HABTM 서버 및 그 반대로CakePHP HABTM 필터링

나는 사용자가 할당 된 서버를 선택하기 위해 Cake를 찾을 방법을 찾고있다.

사용자에게 속하는지 여부에 관계없이 모든 서버를 반환하는 $this->User->Server->find('all'); 같은 것을 시도하고 있습니다.

$this->User->Server->find('all', array('conditions' => array('Server.user_id' => 1))) 단지 알 수없는 열 SQL 오류를 제공합니다.

나는 확실한 뭔가를 놓치고 있지만, 올바른 방향으로 나를 가리켜 줄 사람이 필요하다고 확신합니다.

감사합니다.

답변

1

테이블 이름이 맞습니다. 이 할 수있는 여러 가지 방법이 있습니다 :

이 AppModel을에서 함유 성 행동

사용은 다음과 같은 설정 : 다음

var $recursive = -1; 
var $actsAs = array('Containable'); 

를, 서버를 조회하려면 다음 코드를 사용합니다

$userWithServers = $this->User->find('all', array(
    'conditions' => array('User.id' => 1), 
    'contain' => array('Server') 
)); 

이 작업을 수행하기 위해 서버 모델 대신 사용자 모델을 쿼리합니다.

사용 bindModel는

$this->Server->bindModel(array('hasOne' => array('UsersServer'))); 
$this->Server->find('all', array(
    'fields' => array('Server.*'), 
    'conditions' => array('Server.user_id' => 1) 
)); 

나는 개인적으로 bindModel 많이 사용하지 않는 것이 좋습니다. 결국 코드가 관리하기 어려운 비트가됩니다. 가능한 경우 Containable 동작을 사용해보십시오. 코드는보다 깨끗하고 단순 해 보입니다. bindModel 메서드에 대한 자세한 내용은 here을 참조하십시오.

HTH.

+0

포함 할 수있는 동작은 정확히 내가 찾고있는 동작이었습니다. 감사! –

0

투어 테이블 user_servers의 이름을 지정해야한다고 생각합니다.

+0

Cake 설명서를 보면 제 접근 방식이 효과가 있다고 생각합니까? '이 새로운 조인 테이블의 이름은 관련된 두 모델의 이름을 알파벳순으로 포함하고 밑줄 (_)로 구분해야합니다. –

관련 문제