2012-06-25 3 views
0

게시물에 사용자 (belongsTo)가 있고 사용자의 프로필 (hasOne)이 있습니다. 일반적으로 모든 것이 작동합니다 : 나는 Post to User와 User to Profile에 접근 할 수 있습니다.Cakephp : "필드"의 연결 연관

게시물에서 모든 항목은 일반 찾기를 사용합니다. 결과는 더 많거나 적은이 (난 그냥 예를 들어, 일부 키를 삭제) : 난 단지 몇 가지 필드를 추출 할 때 나는 "필드"를 사용할 때

array(
    'Post' => array(
     'id' => '1', 
     'category_id' => '1', 
     'user_id' => '1', 
     'title' => 'Example', 
     'text' => '', 
    ), 
    'User' => array(
     'password' => '*****', 
     'id' => '1', 
     'group_id' => '1', 
     'username' => 'mirko', 
     'status' => 'active', 
     'Profile' => array(
      'id' => '1', 
      'user_id' => '1', 
      'first_name' => 'Mirko', 
      'last_name' => 'Pagliai', 
     ), 
    ) 
) 

문제가 온다.

'fields'  => array('id', 'title', 'User.id') 

을하고 그 결과는 다음과 같습니다 : 는 예를 들어,이 작품

array(
    'Post' => array(
     'id' => '1', 
     'title' => 'Articolo di prova :-)' 
    ), 
    'User' => array(
     'id' => '1' 
    ) 
) 

그러나 나는 항상 정보에 액세스하는 방법, "필드"를 사용하여, 이해가 안 돼요. don'yt 일이 : "SQLSTATE [42S22] : 발견되지 칼럼 : 1054 알 수없는 열 'User.Profile.id' '필드 목록'에서 오류"

'fields'  => array('id', 'title', 'User.id', 'Profile.id') 

'fields'  => array('id', 'title', 'User.id', 'User.Profile.id') 

난 항상이 오류가 발생합니다.

무엇이 잘못 되었나요? 감사.

편집 : 나는 포함 동작을 사용하고 있지 않습니다. 어쩌면 이것이 문제일까요? 이 경우 필수적입니까? PAGINATE를 사용

예 :

$this->paginate = array(
    'conditions' => $conditions, 
    'fields'  => array('id', 'title', 'User.id', 'Profile.id'), 
    'limit'   => 10, 
    'recursive'  => 2, 
); 

EDIT2 : @Hoff에 덕분에, 내가 가까이 솔루션입니다. 그러나 여전히 잘못된 것이 있습니다 (그리고 Containable은 매우 유용합니다!).

... 
class AppModel extends Model { 
    public $actsAs = array('Containable'); 
    public $recursive = -1; 
... 

을하지만이 작동하지 않습니다 : AppModel.php에서 나는 추가

$this->paginate = array(
      'conditions' => $conditions, 
      'contain'  => array(
       'User' => array(
        'fields' => array('id'), 
        'Profile' => array(
         'fields' => array('id', 'full_name'), 
        ), 
       ), 
       'Category' => array(
        'fields' => 'title', 
       ), 
      ), 
      'fields'  => array('id', 'user_id', 'category_id', 'title', 'created', 'modified', 'published'), 
      'limit'   => 10, 
     ); 

원인은 내가 얻을 :

array(
    (int) 0 => array(
     'Post' => array(
      'id' => '1', 
      'user_id' => '1', 
      'category_id' => '1', 
      'title' => 'Articolo di prova :-)', 
      'created' => '2012-06-21 18:46:00', 
      'modified' => '0000-00-00 00:00:00', 
      'published' => true 
     ), 
     'Category' => array(
      'title' => 'prova', 
      'id' => '1' 
     ), 
     'User' => array(
      'id' => '1' 
     ) 
    ) 
) 

을하지만 (사용자에게 이메일을 모든 필드를 추가하는 경우 , 사용자 이름, 비밀번호 등), 작동 방식 :

  'User' => array(
       'fields' => array('id', 'username'), 
       'Profile' => array(
        'fields' => array('id', 'full_name'), 
       ), 
      ), 

는 내가 얻을 :

array(
    (int) 0 => array(
     'Post' => array(
      'id' => '1', 
      'user_id' => '1', 
      'category_id' => '1', 
      'title' => 'Articolo di prova :-)', 
      'created' => '2012-06-21 18:46:00', 
      'modified' => '0000-00-00 00:00:00', 
      'published' => true 
     ), 
     'Category' => array(
      'title' => 'prova', 
      'id' => '1' 
     ), 
     'User' => array(
      'id' => '1', 
      'username' => 'mirko', 
      'Profile' => array(
       'id' => '1', 
       'full_name' => 'Mirko Pagliai' 
      ) 
     ) 
    ) 
) 
+0

나는 당신의 발견 호출을 볼 수 있을까요? 또한 Containable 비헤이비어를 사용하고 있습니까? – Hoff

+0

첫 번째 게시물을 편집하여 답변했습니다. –

답변

1

대신 '순환'키를 사용하여, 나는이 높게 함유 성 행동을 사용하는 것이 좋습니다. 문제의 문서는 here입니다. 모든 모델에 추가 할 필요가 없도록 AppModel에서 동작을 적용 할 것을 제안합니다. 모델/AppModel.php에서 :

App::uses('Model', 'Model'); 
class AppModel extends Model { 
    public $actsAs = array('Containable'); 
    public $recursive = -1; 
} 

는 그런 다음 페이지 매기기에 :

$this->paginate = array(
    'conditions' => $conditions, 
    'fields'  => array('id', 'title'), 
    'limit'   => 10, 
    'contain' => array(
     'User' => array(
      'fields' => array('id'), 
      'Profile' => array(
       'fields' => array('id') 
      ) 
     ) 
    ) 
); 
+0

이것은 작동하지 않아 포스트와 프로필은 직접적인 관계가 아닙니다. 실제로 오류가 발생합니다. 경고 (512) : 모델 "Post"가 "Profile"모델과 관련이 없습니다. [CORE/Cake/Model/Behavior/ContainableBehavior.php, line 339] 대신에 예제가 User . –

+0

원하는만큼 깊이를 중첩시킬 수 있습니다. 편집을 참조하십시오. 미안 모델을 건너 뛰었습니다! 지금 고쳐야한다. – Hoff

+0

감사합니다. @Hoff, 나는 해결책에 가깝습니다. 그러나 여전히 잘못된 것이 있습니다. 제 첫 번째 메시지 (편집 됨)를보십시오, 고마워요! –

관련 문제