의 분을 기준으로 관련 테이블에서 단일 항목을 가입 나는 다음과 같은 연결을 가진 Item
모델을 가지고있다. CakePHP가 자동으로 Project
데이터를 포함하고있는 것 같습니다 (어쩌면 hasOne
입니까?) ItemPic
데이터가 포함되어 있지 않습니다. index
에서 나는 심지어 Project
데이터를 원하지 않는다. 그러나 나는 ItemPic
데이터를 원한다. 각 Item
레코드를 가져온 경우 하나의 ItemPic
레코드가 합류되기를 원합니다. 이 ItemPic
은 기본적으로 ItemPic.item_id = Item.id
및 ORDER 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();
그건'ItemPic' 물건을 추가하는 것처럼 보이고, 좋은'Project' 물건을 제거 할 수 있습니다. 그러나 지금은 중복 된 데이터를 얻고 있습니다. 항목 1에 가장 낮은 순위 제한 1 그림이있는 대신 다른 행에 연결된 모든 그림이있는 항목 1이 표시됩니다. – smerny
위와 함께 사용하는 쿼리는 다음과 같습니다. http://pastebin.com/1VWXXGTy (여전히'Project'에 참여하고 있음을 알 수 있습니다.) 그리고 여기에 결과 배열 (http : // pastebin)이 있습니다. – smerny
'join' 배열의'order'와'limit' 필드가 작동하지 않는다고 생각합니다. (또는 최소한 예상 한 방식이 아닙니다.) – smerny