2010-12-09 5 views
0

다음 질문이 있습니다.동작, 조건 및 빈 배열

이 코드의 일부입니다 User.id 내 메서드에 전달 일부 사용자 ID와 동일 어디 프로젝트 모델 클래스의 방법이라고

 $result = $this->find('all', array(
      'contain' => array(
       'User' => array(
        'fields' => 'id', 
        'conditions' => array(
         'id' => $user_id 
        ) 
       ) 
      ), 
      'fields' => 'url' 
     )); 

이 발견은() 내가 검색하려는 단지 프로젝트. 사용자 HABTM 프로젝트 및 프로젝트 HABTM 사용자.

그러나 실행 한 후 나는이 다음 :


app/views/projects/index.ctp (line 1) 

Array 
(
    [0] => Array 
     (
      [Project] => Array 
       (
        [url] => http://purpled.biz 
        [id] => 1 
       ) 

      [User] => Array 
       (
        [0] => Array 
         (
          [id] => 4 
          [ProjectsUser] => Array 
           (
            [user_id] => 4 
            [project_id] => 1 
            [projects_users_role_id] => 0 
           ) 

         ) 

       ) 

     ) 

    [1] => Array 
     (
      [Project] => Array 
       (
        [url] => http://google.com 
        [id] => 2 
       ) 

      [User] => Array 
       (
        [0] => Array 
         (
          [id] => 4 
          [ProjectsUser] => Array 
           (
            [user_id] => 4 
            [project_id] => 2 
            [projects_users_role_id] => 0 
           ) 

         ) 

       ) 

     ) 

    [2] => Array 
     (
      [Project] => Array 
       (
        [url] => http://test.com 
        [id] => 3 
       ) 

      [User] => Array 
       (
       ) 

     ) 

) 

당신이 거기에 빈 [사용자] 배열의 마지막 배열, 그래서 내가 (전체 [2] 배열이 빈 배열을 제외 할 수 있습니다 어떻게 말시피) foreach/if 블록을 사용하지 않고? 나는 bindModel을 사용하는 것이 모든 것을 또한 수행 할 것이라는 것을 알고 있지만 이것은 나의 질문을위한 것이 아니다;) 그래서, 어떻게?

답변

2

'포함'키에 조건을 입력하면 특정 모델 내에서 결과가 필터링됩니다.

오른쪽 데이터 검색 나는 here과 매우 유사한 질문에 답했습니다. 여기서 언급 한 모델을 자신의 모델로 바꾸면됩니다. 거기에 대한 대답을 이해하는 데 어려움이 있으면 알려 주시기 바랍니다.

현재 모델 구조에 대한 팁 ProjectsUser 모델에 추가 필드 "projects_users_role_id"가 있습니다. Join 모델이 복잡한 경우 (id, model1_id, model2_id 이상), 모델 자체로 표현해야합니다. 일반적으로 hasMany Through 관계라고합니다.

User hasMany ProjectsUser 
Project hasMany ProjectsUser 
ProjectsUserRole hasMany ProjectsUser 

ProjectsUser belongsTo User 
ProjectsUser belongsTo Project 
ProjectsUser belongsTo ProjectsUserRole 

는 또한 "ProjectMembership"와 같은 더 좋은 뭔가 "ProjectsUser을"이름을 바꿀 수 있습니다.

+0

감사! 결과로 unbindModel/bindModel을 사용하여 조인을 만들고 결과 배열 필터링을 포함 시켰습니다. – purple