필드

2014-02-20 3 views
0

의 분을 기준으로 관련 테이블에서 단일 항목을 가입 나는 다음과 같은 연결을 가진 Item 모델을 가지고있다. CakePHP가 자동으로 Project 데이터를 포함하고있는 것 같습니다 (어쩌면 hasOne입니까?) ItemPic 데이터가 포함되어 있지 않습니다. index에서 나는 심지어 Project 데이터를 원하지 않는다. 그러나 나는 ItemPic 데이터를 원한다. 각 Item 레코드를 가져온 경우 하나의 ItemPic 레코드가 합류되기를 원합니다. 이 ItemPic은 기본적으로 ItemPic.item_id = Item.idORDER BY ItemPic.rank LIMIT 1이어야합니다.필드

기본적으로 색인에서 항목 및 각 항목과 연결된 그림의 목록을 표시 할 수 있습니다. 모든 이미지는 Project 데이터와 함께 view에 하나의 Item은 있지만 목록/색인에는 포함되지 않습니다.

나는이 같은 containable을 사용할 수 있습니다 들었다 :

위 실제로 내가 원하는 방법을 작동
// In the model 
public $actsAs = array('Containable'); 

// In the controller 
$this->paginate = array(
    'conditions' => $conditions, 
    'contain' => array(
     'ItemPic' => array(
      'fields' => array('file_name'), 
      'order' => 'rank', 
      'limit' => 1 
     ) 
    ) 
); 

는 ... 그러나 나는 또한이 일을하는 별도의 쿼리가 모든에 대해 실행되도록 할 것이라고 들었다 싱글 Item ... 나는 내가 피해야한다고 느낍니다.

나는이 일을 시도,하지만 난 중복 데이터를 얻을 수 있으며 어떤 ItemPic 데이터를 첨부하지 않습니다 당신은 일지 모른다 fileds 섹션에서

$this->paginate = array(
     'conditions' => $conditions, 
     'joins' => array(
       array(
         'table' => 'item_pics', 
         'alias' => 'ItemPic', 
         'type' => 'LEFT', 
         'conditions' => array(
           'ItemPic.item_id = Item.id' 
         ), 
         'order' => 'rank ASC', 
         'limit' => 1 
       ) 

     ), 
    'fields' => array('Item.*','Project.*','ItemPic.*') 
    ); 

:

$this->paginate = array(
      'conditions' => $conditions, 
      'joins' => array(
        array(
          'table' => 'item_pics', 
          'alias' => 'ItemPic', 
          'type' => 'LEFT', 
          'conditions' => array(
            'ItemPic.item_id = Item.id' 
          ), 
          'order' => 'rank ASC', 
          'limit' => 1 
        ) 

      ) 
    ); 
    $paginated = $this->Paginator->paginate(); 

답변

0

당신이 이것을 시도하십시오 수를 또는 귀하의 요구 사항에 따라 "품목", "프로젝트"를 지정할 수 없습니다.

감사합니다.

+0

그건'ItemPic' 물건을 추가하는 것처럼 보이고, 좋은'Project' 물건을 제거 할 수 있습니다. 그러나 지금은 중복 된 데이터를 얻고 있습니다. 항목 1에 가장 낮은 순위 제한 1 그림이있는 대신 다른 행에 연결된 모든 그림이있는 항목 1이 표시됩니다. – smerny

+0

위와 함께 사용하는 쿼리는 다음과 같습니다. http://pastebin.com/1VWXXGTy (여전히'Project'에 참여하고 있음을 알 수 있습니다.) 그리고 여기에 결과 배열 (http : // pastebin)이 있습니다. – smerny

+0

'join' 배열의'order'와'limit' 필드가 작동하지 않는다고 생각합니다. (또는 최소한 예상 한 방식이 아닙니다.) – smerny