2011-07-06 4 views
1

저는 cakePHP의 초보자입니다. 사용자가 할당 된 프로젝트의 현재 상태를보고 할 수있는 매우 작은 "상태보고"프로젝트를 만들었습니다. .belongsTo 관계 및 cakePHP의 필터링

저는 여러 계층 사용자가 사용자, 프로젝트를 만들고 서로 할당하는 관리자로 서로 관리 할 수 ​​있도록하기 위해 acl, auth 및 세션 구성 요소를 사용하고 있습니다.

$this->data['Status']['user_id'] = $this->Auth->user('id'); 

내가 필요한 건 지금하고 도움 : 사용자가 로그인하고 자신의 로그인 세션이 자동으로 상태에 대해 "USER_ID"을 담당하는 "상태"를 추가로 전환 될 때 나는 또한 있도록 문제를 해결 한 사용자가 "상태"를 추가하기 위해 선택할 수있는 프로젝트의 옵션을 필터링합니다.

나는 사용자와 필드 사이에 * id, project_id, user_id *와 함께 * projects_users *라는 이름의 프로젝트 사이의 관계를 유지하는 테이블을 가지고 있습니다. 그러나이 설정을 굽고 나면 사용자가 "상태"를 추가 할 때 드롭 다운 메뉴는 "할당 된"프로젝트가 아닌 모든 프로젝트를 제공합니다.

할당 된 프로젝트에 사용자 옵션을 필터링하고 싶습니다. 내가 설정해야 할 관계가 더 많습니까? 아니면 작성하기가 아주 쉬운 작은 함수입니까? 어떤 도움이라도 대단히 감사하겠습니다. 정보를 빠뜨린 경우 다른 것을 게시하게되어 기쁩니다. 당신은 열이 가에을 PROJECT_ID라고해야, 데이터베이스에서

var $belongsTo = array(
    'Group' => array(
     'className' => 'Group', 
     'foreignKey' => 'group_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 

var $hasMany = array(
    'Status' => array(
     'className' => 'Status', 
     'foreignKey' => 'user_id', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => '', 
     'counterQuery' => '' 
    ) 
); 


var $hasAndBelongsToMany = array(
    'Project' => array(
     'className' => 'Project', 
     'joinTable' => 'projects_users', 
     'foreignKey' => 'user_id', 
     'associationForeignKey' => 'project_id', 
     'unique' => true, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'finderQuery' => '', 
     'deleteQuery' => '', 
     'insertQuery' => '' 
    ) 
); 

답변

1

:

class Status extends AppModel { 
var $name = 'Status'; 
//The Associations below have been created with all possible keys, those that are not needed can be removed 

var $belongsTo = array(
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'user_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ), 
    'Project' => array(
     'className' => 'Project', 
     'foreignKey' => 'project_id', 
     'conditions' => '', 
     'fields' => '', 
     'order' => '' 
    ) 
); 
} 

사용자 모델는 다음과 같습니다 : 여기

상태 모델 설정입니다 사용자 프로젝트와 연결된 테이블 테이블의 id 컬럼

그런 다음 User 모델에서 Project 모델과 hasMany 관계를 만들어야합니다.

class User extends AppModel { 
    var $name = 'User'; 
    var $hasMany = 'Project'; 
} 

이제 특정 사용자를 가져 오면 사용자가 연결된 모든 프로젝트가 생성됩니다.

+0

사용자와 프로젝트의 관계를 잘못 설정하는 현재 테이블 project_users가이 설정 방법입니까? 현재 project_id 및 user_id가 있습니다. 이상적으로는 할당 된 프로젝트에서 사용자 테이블을 깨끗하게 유지하고 프로젝트에 여러 사용자가있을 가능성이 있습니다. 현재 사용자를 검색 할 때 연결된 프로젝트가 표시되지만 가장 낮은 사용자가 "상태"만 추가 할 수 있도록 제한하고 있습니다. 따라서 세션의 활성 사용자의 관련 프로젝트를 검색하고 싶습니다. 원래 게시물에도 내 사용자 모델을 추가하고 있습니다. –

+0

이것은 HABTM 테이블입니다. N : M 관계가 있다면 괜찮아. 여기의 경우처럼 보입니다. find 문에서 관계를 가져 오기 위해 여기에 사용자 정의 조인을 사용해야합니다. 자세한 내용은 요리 책을 참조하십시오. – mark

+0

@Curtis 상태를 추가 할 때 프로젝트를 검색하는 데 사용하는 코드를 표시하십시오. –